在子线程中创建新的窗体,遇到的问题。

场景:

  服务端的应用程序创建了一个线程来接收客户端发来的消息,当接收到消息后,需要弹出一个新的窗体,作为响应操作等。

现象:

  新创建的窗体呈现挂起、假死,或者一闪而过的现象。

原因:

  新创建的响应窗体是由子线程创建的,而.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();
原文地址:https://www.cnblogs.com/likeli/p/4707327.html