从另一个窗体打开窗体时出现问题
本文关键字:窗体 问题 开窗 另一个 | 更新日期: 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();