2014-03-27 34 views
0

我的啓動應用程序可能會同時啓動幾個線程。現在基於某些條件,我想完全停止所有線程,而不管其他線程的狀態如何。無論線程如何完全關閉應用程序

我試過App.Current.ShutDown()以及Application.Current.ShutDown但不起作用?

+0

...「無視」不是一個字。不能幫助自己。至於你的問題,你需要向我們展示你的代碼。在創建新'Thread'的最簡單情況下,如果您希望它們共享應用程序的生命週期,請將'IsBackground'屬性設置爲'true'。 –

回答

3

您可以嘗試

Environment.Exit(0); 

您可以從here

你想要的任何代碼替換0您應該看到Killing all threads that opened by application(和Shutting down a multithreaded application因此)我覺得他提供了一些可行的建議。

+0

你也可以做(不推薦)http://stackoverflow.com/questions/5901679/kill-process-tree-programatically-in-c-sharp?rq=1 –

+0

我不確定它是否有任何缺點但它實現了我的目標 –

+1

@SuicideSheep先生我只是覺得它不那麼「乾淨」,但那只是我的看法 –

2

如果您的其他線程後臺線程,他們將結束(即中止默默地當你關機這是唯一的前臺線程上運行的WPF應用程序):

MSDN

」 .. .background線程不會阻止進程終止,一旦所有屬於進程的前臺線程都終止,公共語言運行庫就會結束進程,任何剩餘的後臺線程都會停止並且不會完成。

例如,

Thread myThread = new Thread(); 
myThread.IsBackground = true; 

ThreadPool線程背景的人。

3

線程是後臺線程或前臺線程。後臺線程與前臺線程完全相同,只是後臺線程不會阻止進程終止。一旦屬於某個進程的所有前臺線程都終止,公共語言運行庫就結束該進程。任何剩餘的後臺線程都會停止並且無法完成。

設置你的線程的財產IsBackground=true

var t= new Thread(); 
t.IsBackground = true; 

另見本: How to: Create and Terminate Threads (C# Programming Guide)

3

如果你需要殺死正在運行的應用程序,在任何狀態下,你可以使用

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方法終止您的應用程序。