我仍然有种新的C#和C#中尤其线程。 我试图启动需要一个单线程公寓的功能( STAThread )
但我不能够编译如下代码:
该功能看起来就像一个单独的类名为如下MyClass
:
internal static string DoX(string n, string p)
{
// does some work here that requires STAThread
}
我曾尝试属性[STAThread]的功能之上,但不起作用。
所以我想,如下所示创建一个新的主题:
Thread t = new Thread(new ThreadStart(MyClass.DoX));
但这不会编译(最佳重载的方法有无效的参数错误)。 但是网上的例子非常相似(例如在这里)我在做什么错了,我怎么可以简单地在一个新的STA线程运行的函数?
谢谢
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();