在子线程中创建新的窗体,遇到的问题。
场景:
服务端的应用程序创建了一个线程来接收客户端发来的消息,当接收到消息后,需要弹出一个新的窗体,作为响应操作等。
现象:
新创建的窗体呈现挂起、假死,或者一闪而过的现象。
原因:
新创建的响应窗体是由子线程创建的,而.net平台下,子线程执行完毕后,会自动释放资源,同样的,这个新创建的窗体也会被释放掉。若是这个线程处于监听或者一些其他的连续执行状态,那么,这个窗体就会出现假死状态。
解决方案:
可以在子线程中调用一个代码段,而这个代码段通过invoke方法回答主线程中去创建和现实Form2,这样,子线程完成后,Form2就不会被释放掉,因为它属于主线程。
示例代码:
(示例一)
1 //this表示主窗口的类 2 this.Invoke((MethodInvoker)delegate 3 { 4 f = new Form2(); 5 f.Show(); 6 });
(示例二)
1 //也可以这样写 2 new Thread((ThreadStart)delegate 3 { 4 Application.Run(new Form2()); 5 }).Start();
作者:愤怒的TryCatch
请尊重别人的劳动成果,让分享成为一种美德,欢迎转载。另外,文章在表述和代码方面如有不妥之处,欢迎批评指正。留下你的脚印,欢迎评论!