我的解决方案中有两个项目,每个项目都有一个表单。
我试图在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'
无法实例化,因为当前线程不在单线程单元中。
答案 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();