一、在實際編碼中會遇到這種問題:
在客戶關閉程序時,主線程直接關閉,不考慮子線程。
但是任務管理器中,主程序進程還在運行(在等子線程結束,而子線程做成了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