zoukankan      html  css  js  c++  java
  • 在子线程中创建新的窗体,遇到的问题。

    场景:

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

    现象:

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

    原因:

      新创建的响应窗体是由子线程创建的,而.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();
  • 相关阅读:
    ORACLE查询删除重复记录三种方法
    是否可以从一个static方法内部发出对非static方法的调用
    协程(微线程)
    多线程、多进程
    python3.6.5修改print的颜色
    Python之时间和日期模块
    Python之字符(2)
    Python之字符
    python之列表
    Python中的文件操作
  • 原文地址:https://www.cnblogs.com/likeli/p/4707327.html
Copyright © 2011-2022 走看看