首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用线程必须是STA,因为许多UI组件在WPF中都需要STA

调用线程必须是STA,因为许多UI组件在WPF中都需要STA
EN

Stack Overflow用户
提问于 2010-11-15 18:56:27
回答 1查看 49K关注 0票数 12

我的场景是:

代码语言:javascript
复制
   void Installer1_AfterInstall(object sender, InstallEventArgs e)
    {
        try
        {         

              MainWindow ObjMain = new MainWindow();               
              ObjMain.Show();              
        }
        catch (Exception ex)
        {
            Log.Write(ex);
        }
    }

我收到错误“调用线程必须是STA,因为许多UI组件都需要STA”

我做了什么?

EN

回答 1

Stack Overflow用户

发布于 2010-11-15 19:03:30

通常,WPF的线程的入口点方法会为ThreadMethod设置[STAThreadAttribute],或者在使用Thread.SetApartmentState()创建线程时将单元状态设置为STA。但是,这只能在线程启动之前设置。

如果无法将此属性应用于执行此任务的线程的应用程序的入口点,请尝试以下操作:

代码语言:javascript
复制
void Installer1_AfterInstall(object sender, InstallEventArgs e)
{
    var thread = new Thread(new ThreadStart(DisplayFormThread));

    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    thread.Join();
}

private void DisplayFormThread()
{
    try
    {
        MainWindow ObjMain = new MainWindow();
        ObjMain.Show();
        ObjMain.Closed += (s, e) => System.Windows.Threading.Dispatcher.ExitAllFrames();

        System.Windows.Threading.Dispatcher.Run();
    }
    catch (Exception ex)
    {
        Log.Write(ex);
    }
}
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4183622

复制
相关文章

相似问题

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