C#如何徹底關閉自已,退出子線程?


 托管線程或者是后台線程,或者是前台線程。后台線程不會使托管執行環境處於活動狀態,除此之外,后台線程與前台線程是一樣的。一旦所有前台線程在托管進程 (其中 .exe 文件是托管程序集)中被停止,系統將停止所有后台線程並關閉。通過設置 Thread.IsBackground 屬性,可以將一個線程指定為后台線程或前台線程。例如,通過將 Thread.IsBackground 設置為 true,就可以將線程指定為后台線程。同樣,通過將 IsBackground 設置為 false,就可以將線程指定為前台線程。從非托管代碼進入托管執行環境的所有線程都被標記為后台線程。通過創建並啟動新的 Thread 對象而生成的所有線程都是前台線程。如果要創建希望用來偵聽某些活動(如套接字連接)的前台線程,則應將 Thread.IsBackground 設置為 true,以便進程可以終止。 
        一個線程或者是后台線程或者是前台線程。后台線程與前台線程類似,區別是后台線程不會阻止進程終止。一旦屬於某一進程的所有前台線程都終止,公共語言運行庫就會通過對任何仍然處於活動狀態的后台線程調用 Abort 來結束該進程。         

        以上是引用一位網友所提及的,關於托管線程的設置的問題。我在使用TcpListener的時候也遇到過同樣的問題。退出程序時,使用Application.Exit()和Application.ExitThread()都不行,甚至加上GC.Collect()也不管用。在程序退出時仍然在任務管理器中還可以看到自己的進程在運行。

        最后,參加這位網友所言,我並沒有設置Thread.IsBackground 的屬性,因為設置這個屬性之后是由程序自動調用Thread的Abort方法。我在我的使用TcpListener的類庫里,增加了一個對應於Start的Stop方法,在Stop方法中,使用了Thread.Abort方法,在退出時調用Application.Exit()之前,先調用類庫的Stop方法,程序很快退出!


免責聲明!

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



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