开始在C#中STAThread(Starting an STAThread in C#)

2019-06-26 13:18发布

我仍然有种新的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线程运行的函数?

谢谢

Answer 1:

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();


文章来源: Starting an STAThread in C#
标签: c# .net wcf sta