我仍然是C#的新手,尤其是C#中的线程。 我正在尝试启动一个需要单线程单元(STAThread)
的函数但我无法编译以下代码:
该函数在名为MyClass
的单独类中如下所示:
internal static string DoX(string n, string p)
{
// does some work here that requires STAThread
}
我在函数顶部尝试了[STAThread]属性,但这不起作用。
所以我试图创建一个新的Thread如下:
Thread t = new Thread(new ThreadStart(MyClass.DoX));
但是这不会编译(最好的重载方法有无效的参数错误)。但是,在线示例非常相似(example here) 我做错了什么,如何在新的STA线程中运行函数?
由于
答案 0 :(得分:36)
Thread thread = new Thread(() => MyClass.DoX("abc", "def"));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
如果你需要这个值,你可以将其“捕获”回一个变量,但请注意,该变量在另一个线程结束之前不会有值:
int retVal = 0;
Thread thread = new Thread(() => {
retVal = MyClass.DoX("abc", "def");
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
或者更简单:
Thread thread = new Thread(() => {
int retVal = MyClass.DoX("abc", "def");
// do something with retVal
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();