如何確保在關閉主窗口後所有程序線程都會中止?如何強制所有程序線程在程序關閉時退出?
回答
- 如果您已經很好地設計了線程,您應該有一種機制來關閉它們 - 例如,使用
ManualResetEvent
信號他們關閉 - 可以的Thread.join等待,直到他們關閉,或Thread.Abort的,讓他們在一個討厭的方式
- 如果他們是後臺線程,他們將在應用程序不會中止關閉
參見:http://msdn.microsoft.com/en-us/library/7a2f3ay4(v=vs.80).aspx
我會添加標準評論 - 永遠不要使用中止(在S/O上進行搜索以查看所有細節,爲什麼這是一個非常糟糕的主意)。 –
請仔細閱讀爲什麼,因爲在大多數情況下,這是一個完全可以接受的折中方案。 「永遠不要放棄」是錯誤的,我害怕。 –
公平點。除非你明白反對的觀點,否則你不要這樣做。 –
收集它們的地方,比如
static public List<Thread> AllThreads;
,並使用該集合.Abort()
他們,一個接一個。
這是硬和錯誤的方式。更好的辦法是讓他們以某種方式停下來,然後一個接着一個地點。
你的意思是'.abort()'? '.Terminate'不存在 –
另外,如果你有一個列表,爲什麼不'AllThreads.ForEach(t => t.Abort());'? –
@KierenJohnstone當我說他們一個接一個終止他時,那正是我的意思。 Lambda,不然,你是一個接一個地終止它們的。 –
您可以設置 「的IsBackground」 屬性設置爲true。當應用程序退出時,CLR會關閉所有後臺線程。
通過讓程序真正關閉,即。不要故意引入任何強制運行主窗口的線程等待其他線程的代碼。運行主窗口的線程然後可以自由地退出Process(),然後操作系統將終止進程中的所有其他線程,無論他們在做什麼。
RGDS, 馬丁
默認情況下在.NET上,不是後臺的線程將意味着應用程序不會簡單地「關閉」。如果你打電話給ExitProcess(在.NET世界中叫做Environment.Exit),那就可以工作了 –
糟糕 - 誤讀了'C#'標籤:((在做C++的時候.. –
設置IsBackground
屬性爲true,並添加以下行:
AppDomain.CurrentDomain.ProcessExit += CloseMe; // for the main process
AppDomain.CurrentDomain.DomainUnload += CloseMe; // for ApplicationDomains
讓CloseMe
方法設置這是在線程的主循環檢查的標誌。
嘗試
Application.ExitThread();
Environment.Exit(0);
或
Dispatcher.CurrentDispatcher.Thread.Abort();
- 1. 退出事件處理程序強制應用程序關閉
- 2. 如何在退出應用程序時關閉所有執行程序?
- 3. 後退線程不關閉退出應用程序
- 4. 如何關閉所有活動並退出應用程序
- 5. NSWindow關閉時退出應用程序
- 6. 退出應用程序時是否應關閉所有資源?
- 7. 在Android應用程序創建線程結果強制關閉
- 8. 線程OutOfMemoryError,強制關閉
- 9. C#應用程序在關閉時不會退出(有時)
- 10. 如何退出多線程程序?
- 11. 如何在窗口關閉時退出MonoMac應用程序?
- 12. Backgroundworker線程不關閉程序關閉?
- 13. 如何在關閉wpf應用程序時關閉所有後臺進程
- 14. bash:退出程序執行,但在退出腳本後關閉程序
- 15. 可可 - 強制退出所有其他應用程序
- 16. Android thread.join()線程強制在應用程序再次啓動時關閉
- 17. 當關閉屏幕時,應用程序強制關閉
- 18. 在Android中強制關閉線程
- 19. 強制關閉應用程序
- 20. SharedPreferences使應用程序強制關閉
- 21. SQLITE Query強制應用程序關閉
- 22. Android SharedPreferences強制關閉應用程序
- 23. Chrome擴展程序:強制popup.html關閉
- 24. 應用程序強制關閉ViewPager?
- 25. ListView強制關閉應用程序
- 26. 強制關閉應用程序
- 27. 應用程序強制關閉db.execSQL();
- 28. 強制關閉應用程序
- 29. 強制關閉應用程序
- 30. 應用程序強制關閉
是線程設置爲後臺線程? –
WPF或WinForms? – sll
@ LasseV.Karlsen:否 – armin