1 回答

TA貢獻1796條經驗 獲得超7個贊
所有前臺線程停止后,進程結束。
在典型的 Winforms 應用程序中,有一個主前臺線程 - UI 線程。這會在主窗體(在 中使用的窗體Application.Run
)關閉后停止。之后檢查您的Main
方法正在做什么,或者只是在那里放置一個斷點以查看線程是否成功
如果您正在執行多線程,您可能還會有一些前臺工作線程。您有責任確保它們全部停止。棘手的部分是您正在使用的某些類可能會在您不知情的情況下自行啟動此類線程。首先要記住的是,您創建的任何實現的對象IDisposable
實際上都應該被釋放。這可能會解決這個問題。一個經常引起麻煩的例子是System.Threading.Timer
(or System.Timers.Timer
) - 如果你不這樣做Dispose
,它會讓你的應用程序無限期地運行。
要調查此問題,您可以使用 Visual Studio 調試器中的線程列表(調試 -> Windows -> 線程)。運行應用程序,根據需要等待,關閉窗體,然后暫停調試器。線程列表將顯示進程中的所有托管線程。查看正在運行的線程的位置 - 雙擊一個線程會將調試器視圖切換到該線程,然后您可以看到調用堆棧。這可能會讓您了解該線程來自何處,以及它當前正在執行什么代碼(即它為什么被卡?。?。您可能會在某處看到一個等待(除非它實際上在做 CPU 工作);只需查看調用堆棧(調試 -> Windows -> 調用堆棧)并查找可識別的內容。
如果您檢查了所有線程,并且在調用堆棧中看不到任何可疑的東西,則可能需要在調試器中進行一些配置。您可以嘗試兩種主要方法 - 首先,在調用堆棧窗口中,右鍵單擊并選擇“顯示外部代碼”。如果這沒有幫助,您可能必須禁用“僅我的代碼”(選項 -> 調試器),并為所涉及的模塊啟用符號加載。這有點復雜。
- 1 回答
- 0 關注
- 291 瀏覽
添加回答
舉報