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

本文讨论了在程序关闭时如何正确处理主线程与子线程的关系,包括使用Abort()方法关闭线程、在启动时强制停止同名进程、将线程设置为后台线程等解决方案,以避免出现类似死机的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

  但是任务管理器中,主程序进程还在运行(在等子线程结束,而子线程做成了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.youkuaiyun.com/effectiveagui/article/details/7841792

转载于:https://www.cnblogs.com/qvbrgw/p/4733455.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值