场景:
服务端的应用程序创建了一个线程来接收客户端发来的消息,当接收到消息后,需要弹出一个新的窗体,作为响应操作等。
现象:
新创建的窗体呈现挂起、假死,或者一闪而过的现象。
原因:
新创建的响应窗体是由子线程创建的,而.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();
时间: 2024-09-27 15:26:39