问题
I am still kind of new to C#, and especially threading in C#. I am trying to start a function that requires a single threaded apartment (STAThread)
But I am not able to compile the following code:
The function looks as follows in a separate class called MyClass
:
internal static string DoX(string n, string p)
{
// does some work here that requires STAThread
}
I have tried the attribute [STAThread] on top of the function but that does not work.
So I am trying to create a new Thread as follows:
Thread t = new Thread(new ThreadStart(MyClass.DoX));
but this will not compile (The best overloaded method has invalid arguments error). However the example online is very similar (example here) What am I doing wrong and how can I simply make a function run in a new STA thread?
Thanks
回答1:
Thread thread = new Thread(() => MyClass.DoX("abc", "def"));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
If you need the value, you can "capture" that back into a variable, but note that the variable won't have the value until the end of the other thread:
int retVal = 0;
Thread thread = new Thread(() => {
retVal = MyClass.DoX("abc", "def");
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
or perhaps simpler:
Thread thread = new Thread(() => {
int retVal = MyClass.DoX("abc", "def");
// do something with retVal
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
来源:https://stackoverflow.com/questions/11681666/starting-an-stathread-in-c-sharp