• C#程序关闭时怎么关闭子线程


    一、在实际编码中会遇到这种问题:

      在客户关闭程序时,主线程直接关闭,不考虑子线程。

      但是任务管理器中,主程序进程还在运行(在等子线程结束,而子线程做成了while(1)等情况)

    二、在主线程关闭处理时,首先关闭子线程。

      类似代码如下:

    private void Main_FormClosing(object sender, FormClosingEventArgs e)
    {
                if (flowThread != null && flowThread.isAlive)
                        flowThread.Abort();
    
                this.Dispose();
    }

    但是会遇到主程序关不掉,类似于死机的状态

    三、在程序启动时强制停止同名进程

    Process[] processes = System.Diagnostics.Process.GetProcesses(); //获得所有进程  
    foreach (Process p in processes)  
    {       
        if (p.ProcessName == "WaterMonitorIS_Weiding" && p.StartTime < DateTime.Now.AddMinutes(-2))  
        {  
            p.Kill();  
        }  
    }  

    四、把线程赋值为null

    private void Main_FormClosing(object sender, FormClosingEventArgs e)
    {
                flowThread = null;
                this.Dispose();
    }

    五、逼格最高的版本,使用Thread对象的一个IsBackground属性,设置为true即可,在主线程关闭时,子线程随之关闭,速度很快。

    flowThread.IsBackground = true;

    参考博文:http://blog.csdn.net/effectiveagui/article/details/7841792

  • 相关阅读:
    RTT设备与驱动之串口
    RTT设备与驱动之PIN设备
    RTT之ENV
    MQTT学习之一
    思维导图软件
    英语单词学习方法
    RTT之POSIX
    10 个强大的JavaScript / jQuery 模板引擎推荐
    30个实用的jQuery选项卡/导航教程推荐
    jquery 自动完成 Autocomplete插件汇总
  • 原文地址:https://www.cnblogs.com/qvbrgw/p/4733455.html
Copyright © 2020-2023  润新知