前不久,做一個winform小程序,是給客戶導數據用的。當時就發現調試的時候,線程有點問題,到某個點時就走不動了。但是運行確實沒有問題的。
只是在關閉窗體后,資源管理器里,一大堆進程。。。
當時,客戶急着用,小測了下,導出數據無誤,進程就先不管了。
后來自己去查資料,發現 只要在線程那里設置個屬性
Thread th = new Thread(Excute); th.IsBackground = true;
這樣就解決問題了。
這個屬性的意思就是把線程設置為后台線程。
然后關閉進程的同時,線程也會隨之關閉。
不知道各位還有什么妙招,多多指導哈
度娘說:
程序退出的方法:
- this.Close(); 只是關閉當前窗口,若不是主窗體的話,是無法退出程序的,另外若有托管線程(非主線程),也無法干凈地退出;
- Application.Exit(); 強制所有消息中止,退出所有的窗體,但是若有托管線程(非主線程),也無法干凈地退出;
- Application.ExitThread(); 強制中止調用線程上的所有消息,同樣面臨其它線程無法正確退出的問題;
- System.Environment.Exit(0); 這是最徹底的退出方式,不管什么線程都被強制退出,把程序結束的很干凈。
我是用了 th.IsBackground = true 就解決了的,System.Environment.Exit(0);是不是更徹底些呢?
附上IsBackground對線程的重要作用
1、當在主線程中創建了一個線程,那么該線程的IsBackground默認是設置為FALSE的。
2、當主線程退出的時候,IsBackground=FALSE的線程還會繼續執行下去,直到線程執行結束。
3、只有IsBackground=TRUE的線程才會隨着主線程的退出而退出。
4、當初始化一個線程,把Thread.IsBackground=true的時候,指示該線程為后台線程。后台線程將會隨着主線程的退出而退出。
5、原理:只要所有前台線程都終止后,CLR就會對每一個活在的后台線程調用Abort()來徹底終止應用程序。