从另一个窗体打开窗体时出现问题

本文关键字:窗体 问题 开窗 另一个 | 更新日期: 2023-09-27 18:34:31

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

我正在尝试在 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',因为当前线程不在单线程单元中。

从另一个窗体打开窗体时出现问题

引用:

"继续并将 [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());
    }
}

">

在这里查看第二个答案:单线程单元 - 无法实例化 ActiveX 控件

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

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