我的啓動應用程序可能會同時啓動幾個線程。現在基於某些條件,我想完全停止所有線程,而不管其他線程的狀態如何。無論線程如何完全關閉應用程序
我試過App.Current.ShutDown()
以及Application.Current.ShutDown
但不起作用?
我的啓動應用程序可能會同時啓動幾個線程。現在基於某些條件,我想完全停止所有線程,而不管其他線程的狀態如何。無論線程如何完全關閉應用程序
我試過App.Current.ShutDown()
以及Application.Current.ShutDown
但不起作用?
您可以嘗試
Environment.Exit(0);
您可以從here
你想要的任何代碼替換0
您應該看到Killing all threads that opened by application(和Shutting down a multithreaded application因此)我覺得他提供了一些可行的建議。
你也可以做(不推薦)http://stackoverflow.com/questions/5901679/kill-process-tree-programatically-in-c-sharp?rq=1 –
我不確定它是否有任何缺點但它實現了我的目標 –
@SuicideSheep先生我只是覺得它不那麼「乾淨」,但那只是我的看法 –
如果您的其他線程後臺線程,他們將結束(即中止默默地當你關機這是唯一的前臺線程上運行的WPF應用程序):
從MSDN:
」 .. .background線程不會阻止進程終止,一旦所有屬於進程的前臺線程都終止,公共語言運行庫就會結束進程,任何剩餘的後臺線程都會停止並且不會完成。
例如,
Thread myThread = new Thread();
myThread.IsBackground = true;
ThreadPool線程背景的人。
線程是後臺線程或前臺線程。後臺線程與前臺線程完全相同,只是後臺線程不會阻止進程終止。一旦屬於某個進程的所有前臺線程都終止,公共語言運行庫就結束該進程。任何剩餘的後臺線程都會停止並且無法完成。
設置你的線程的財產IsBackground=true
var t= new Thread();
t.IsBackground = true;
另見本: How to: Create and Terminate Threads (C# Programming Guide)
如果你需要殺死正在運行的應用程序,在任何狀態下,你可以使用
Environment.Exit(0); // use -1 if you're exiting with an error, exiting with 0 is considered to have exited without errors.
或者如果你真的想用錘子
Environment.FailFast()
FailFast的文檔說: 將消息寫入Windows應用程序事件日誌後立即終止進程,然後將錯誤報告包括在Microsoft報告中。
如果應用程序的狀態無法修復,並且執行應用程序的try/finally塊和終結器會損壞程序資源,則使用FailFast方法而不是Exit方法終止您的應用程序。
...「無視」不是一個字。不能幫助自己。至於你的問題,你需要向我們展示你的代碼。在創建新'Thread'的最簡單情況下,如果您希望它們共享應用程序的生命週期,請將'IsBackground'屬性設置爲'true'。 –