簡體   English   中英

如何在程序關閉時強制所有程序線程退出?

[英]How can I force all program threads to exit on program close?

關閉主窗口后,如何確保所有程序線程都中止?

您可以將“IsBackground”屬性設置為true。 CLR在應用程序退出時關閉所有后台線程。

  • 如果你已經很好地設計了線程,你應該有一個機制來關閉它們 - 例如使用ManualResetEvent來指示它們關閉
  • 你可以讓Thread.Join等到它們關閉,或者Thread.Abort讓它們以令人討厭的方式中止
  • 如果它們是后台線程,它們將在應用程序關閉時關閉

另見: http//msdn.microsoft.com/en-us/library/7a2f3ay4(v = vs.80).aspx

嘗試

Application.ExitThread();
Environment.Exit(0);

要么

Dispatcher.CurrentDispatcher.Thread.Abort();

IsBackground屬性設置為true,並添加以下行:

AppDomain.CurrentDomain.ProcessExit += CloseMe; // for the main process
AppDomain.CurrentDomain.DomainUnload += CloseMe; // for ApplicationDomains

CloseMe方法設置一個在線程的主循環中檢查的標志。

將它們收集到某處,例如

static public List<Thread> AllThreads;

並將該集合.Abort()用於.Abort()它們。

這是艱難錯誤的方式。 更好的方法是讓他們以某種方式停止,然后一個接一個地進行.Join()

通過讓程序實際關閉,即。 不要故意引入任何強制運行主窗口的線程等待任何其他線程的代碼。 然后,運行主窗口的線程可以自由地使用exitProcess(),然后操作系統將中止進程中的所有其他線程,無論它們在做什么。

Rgds,馬丁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM