亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關閉后,我的 Windows 窗體應用程序仍在作為任務運行

關閉后,我的 Windows 窗體應用程序仍在作為任務運行

C#
絕地無雙 2022-11-13 15:55:11
我已經使用 Visual Studio 2010 構建了一個 C# Windows 窗體應用程序。運行和關閉應用程序在短時間內成功完成。該進程未在任務管理器中運行。以及調試過程關閉。沒有問題發生。但是,如果應用程序運行了一段時間,程序沒有關閉并且仍然在任務管理器中運行(我只是打開應用程序而不做任何其他事情,只需等待幾個小時來重現問題)。在調試模式下,我必須單擊 STOP DEBUGGING 按鈕才能結束進程。我該怎么做才能找到根本原因?
查看完整描述

1 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

所有前臺線程停止后,進程結束。

在典型的 Winforms 應用程序中,有一個主前臺線程 - UI 線程。這會在主窗體(在 中使用的窗體Application.Run)關閉后停止。之后檢查您的Main方法正在做什么,或者只是在那里放置一個斷點以查看線程是否成功

如果您正在執行多線程,您可能還會有一些前臺工作線程。您有責任確保它們全部停止。棘手的部分是您正在使用的某些類可能會在您不知情的情況下自行啟動此類線程。首先要記住的是,您創建的任何實現的對象IDisposable實際上都應該被釋放。這可能會解決這個問題。一個經常引起麻煩的例子是System.Threading.Timer(or System.Timers.Timer) - 如果你不這樣做Dispose,它會讓你的應用程序無限期地運行。

要調查此問題,您可以使用 Visual Studio 調試器中的線程列表(調試 -> Windows -> 線程)。運行應用程序,根據需要等待,關閉窗體,然后暫停調試器。線程列表將顯示進程中的所有托管線程。查看正在運行的線程的位置 - 雙擊一個線程會將調試器視圖切換到該線程,然后您可以看到調用堆棧。這可能會讓您了解該線程來自何處,以及它當前正在執行什么代碼(即它為什么被卡?。?。您可能會在某處看到一個等待(除非它實際上在做 CPU 工作);只需查看調用堆棧(調試 -> Windows -> 調用堆棧)并查找可識別的內容。

如果您檢查了所有線程,并且在調用堆棧中看不到任何可疑的東西,則可能需要在調試器中進行一些配置。您可以嘗試兩種主要方法 - 首先,在調用堆棧窗口中,右鍵單擊并選擇“顯示外部代碼”。如果這沒有幫助,您可能必須禁用“僅我的代碼”(選項 -> 調試器),并為所涉及的模塊啟用符號加載。這有點復雜。


查看完整回答
反對 回復 2022-11-13
  • 1 回答
  • 0 關注
  • 291 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號