C# Windows窗体生成在第二个线程中失败

C# Windows窗体生成在第二个线程中失败,c#,winforms,webbrowser-control,.net-4.5,backgroundworker,C#,Winforms,Webbrowser Control,.net 4.5,Backgroundworker,首先,我的问题是: 我尝试在后台工作程序中构建winform。此表单类仅包含一个webbrowser控件。表单不会生成并跳出到主线程。 我在Visual Studio 2013 Pro和WinForms上使用c#with.NET 4.5 我所做的: 启动后台工作程序 private void bt_dashboard_chat_Click(object sender, EventArgs e) { if (!this.bw_webchat.IsBusy)

首先,我的问题是:

我尝试在后台工作程序中构建winform。此表单类仅包含一个webbrowser控件。表单不会生成并跳出到主线程。 我在Visual Studio 2013 Pro和WinForms上使用c#with.NET 4.5

我所做的:

启动后台工作程序

    private void bt_dashboard_chat_Click(object sender, EventArgs e)
    {
        if (!this.bw_webchat.IsBusy)
        {
            this.bw_webchat.RunWorkerAsync(this.auth.getUserName());
        }
    }
工人

      {
        String name = e.Argument as String;
        DashBoard.Forms.Chat.DummyChat tmp = new Forms.Chat.DummyChat(name);
        tmp.ShowDialog();
      }
表单构造函数

        InitializeComponent();
        this.wb_twitchchat.Url = new Uri("http://link.tld/" + name + "/chat");
        this.Text = "Chat of " + name;
这个问题。线程在InitializeComponent()处跳出;在线

this.wb_twitchchat = new System.Windows.Forms.WebBrowser();
这是第二条线


有人知道为什么会这样吗?其他窗体在backgroundworker线程中工作正常://p>异常由后台工作程序本身捕获。使用try/catch块替换您提到的“工作者”代码

捕获的异常应该类似于: 无法实例化ActiveX控件“8856f961-340a-11d0-a96b-00c04fd705a2”,因为当前线程不在单线程单元中

例外情况基于以下代码:

    private void button1_Click(object sender, EventArgs e)
    {
        var bw = new BackgroundWorker();
        bw.DoWork += BwOnDoWork;
        bw.RunWorkerAsync();

    }

    private void BwOnDoWork(object sender, DoWorkEventArgs doWorkEventArgs)
    {
        try
        {
            WebBrowser wb = new WebBrowser();
        }
        catch (Exception ex)
        {
        }
    }

我的意思是,在这一行(this.wb_twitchchat=new System.Windows.Forms.WebBrowser();)之后,将跳过其余部分,不发生任何事情,并返回主线程。然后它可能会引发异常。您是否检查了输出窗口中是否存在异常,可能是未中断执行的异常?忘记检查输出:/System.Windows.Forms.dll中的输出:“System.Threading.ThreadStateException”有什么想法吗?^^我用try catch捕获了该异常,并得到以下消息:Das ActiveX Steuerelement 8856f961-340a-11d0-a96b-00c04fd705a2不适用于aktuelle单线程公寓的werden。“很抱歉出现德国异常消息,不知道如何更改。Ok找到了一个解决方案:后台工作程序不支持ApartmentState.STA,因此我需要切换到带有SetApartmentState(ApartmentState.STA)的普通线程;现在它工作得很好。问题是Webbrowser控件需要ApartmentState.STA.thx进行回复。是的,你的权利。用线程找到一个解决方案。删除所有backgroundworker内容,并使用SetApartmentState(ApartmentState.STA)添加一个新线程。现在还可以:)