26

我还是 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));

但这不会编译(最好的重载方法有无效参数错误)。但是在线示例非常相似(示例here) 我做错了什么,如何简单地使函数在新的 STA 线程中运行?

谢谢

4

1 回答 1

48
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();
于 2012-07-27T05:10:46.550 回答