为什么不能用异步线程创建带自定义组件的FORM?
通过异步线程创建一个什么都不带的FORM时,是没有问题的。但是我自己封装了一个通讯组件,把这个组件放在FORM上,通过异步线程去创建时就出错了:当前线程不在单线程单元中,无法实例化ActiveX控件。
主窗体源码:
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(Open));
t.Start();
}
private void Open()
{
Form2 f2 = new Form2();
f2.ShowDialog();
}
被创建窗体的源码:
this.communicationToolBar1 = new EntlogicCommunicationClient.CommunicationToolBar();
communicationToolBar1 就是自定义的组件,上述语句就提示错误了
------解决方案--------------------线程安全问题吧
------解决方案--------------------通过非UI线程来创建UI元素本来就不合法呀
------解决方案--------------------用Invoke来创建窗体。
------解决方案--------------------显示UI的话,用单线程模型,加这样一句话应该就可以了。
t.ApartmentState = System.Threading.ApartmentState.STA;