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


    场景:

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

    现象:

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

    原因:

      新创建的响应窗体是由子线程创建的,而.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();
  • 相关阅读:
    2020软件工程作业 4
    2020软件工程作业 3
    2020软件工程作业 2
    2020软件工程作业 1
    2020软件工程最后一次作业
    2020软件工程第四次作业
    2020软件工程第三次作业
    2020软件工程第二次作业
    2020软件工程第一次作业
    结对第二次作业
  • 原文地址:https://www.cnblogs.com/likeli/p/4707327.html
Copyright © 2020-2023  润新知