首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C#中启动STAThread

在C#中启动STAThread
EN

Stack Overflow用户
提问于 2012-07-27 12:55:58
回答 1查看 35.6K关注 0票数 25

对于C#,尤其是C#中的线程,我还是个新手。我正在尝试启动一个需要单线程单元(STAThread)的函数

但我不能编译以下代码:

在名为MyClass的单独类中,该函数如下所示

代码语言:javascript
复制
internal static string DoX(string n, string p)
        {
            // does some work here that requires STAThread
        }

我已经在函数顶部尝试了属性STAThread,但它不起作用。

因此,我尝试创建一个新的线程,如下所示:

代码语言:javascript
复制
 Thread t = new Thread(new ThreadStart(MyClass.DoX));

但是这不会编译(最好的重载方法有无效参数错误)。然而,在线的例子非常相似,(example here),我做错了什么,我怎么才能简单地让一个函数在一个新的STA线程中运行?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-27 13:10:47

代码语言:javascript
复制
Thread thread = new Thread(() => MyClass.DoX("abc", "def"));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

如果您需要该值,可以将其“捕获”回一个变量中,但请注意,该变量直到另一个线程结束时才会有该值:

代码语言:javascript
复制
int retVal = 0;
Thread thread = new Thread(() => {
    retVal = MyClass.DoX("abc", "def");
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

或者可能更简单:

代码语言:javascript
复制
Thread thread = new Thread(() => {
    int retVal = MyClass.DoX("abc", "def");
    // do something with retVal
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11681666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档