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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM