从另一个表单打开表单的问题

时间:2014-12-17 13:23:47

标签: c# winforms forms

我的解决方案中有两个项目,每个项目都有一个表单。

我试图在if语句中打开第二个表单但发生的情况是,当声明新表单时,代码突然中断并移动到client.close();而不完成声明。

我通常在asp.net中编程,之前我没有看过类似的东西,代码永远不会运行到.ShowDialog()并且不会因错误而中断。

  else if (DeviceRead == "DeviceRead:2")
  {
      _RequestID = RequestID.Remove(0, 10);
      _DeviceID = DeviceRead.Remove(0, 11);

      //this.Hide();

      GenericEPadDemo.frmMain sig = new GenericEPadDemo.frmMain();
      sig.ShowDialog();

  }  

 }
 s.Close();

 }
 finally
 {
    client.Close();
 }

返回的错误是:ActiveX control '30778fc6-eaba-43a7-ba39-6875a3b16057'无法实例化,因为当前线程不在单线程单元中。

1 个答案:

答案 0 :(得分:1)

引用:

" 继续将[STAThread]添加到应用程序的主条目,这表明COM线程模型是单线程单元(STA)

示例:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new WebBrowser());
    }
}

&#34;

在这里查看第二个答案: Single-threaded apartment - cannot instantiate ActiveX control

[稍后编辑] 尝试上面链接中的第一个答案,如下:

Thread t = new Thread(new ThreadStart(() =>
{
    {
        GenericEPadDemo.frmMain sig = new GenericEPadDemo.frmMain();
        sig.ShowDialog();
    };
}));
t.SetApartmentState(ApartmentState.STA);
t.Start();