2017-04-02 46 views
0

我有下面的代碼,以捕獲未處理的異常withing的Program.cs文件中的WinForms應用從堆棧跟蹤,多線程他指出錯誤的位置

private static void OnGuiUnhandedException(object sender, System.Threading.ThreadExceptionEventArgs e) 
     {    
      MessageBox.Show(e.Exception.Message); 
      MessageBox.Show(e.Exception.StackTrace.ToString()); 
      MessageBox.Show(e.Exception.TargetSite.ToString());    
      Application.Exit(); 
     } 

我與images.I工作繼續得到這種異常

Object is Currently in use elsewhere

該應用程序同時使用2個後臺工作人員。 我一直在試圖指出從錯誤的確切位置/行號。

從堆棧跟蹤,這是我所得到的

enter image description here

我怎樣才能找到錯誤的確切位置?以便我可以採取適當的措施來糾正這個問題。

回答

1

您需要使用Windows調試工具,如Adplus,WindbgMemoScope.Net,這是一種相對較新的圖形工具,它在內部使用clrmd。觀念仍然存在,像崩潰,掛起,這是系統的問題,尤其是在多用戶出現因同步,數據結構/內存損壞/多線程的環境問題,需要通過在運行時創建快照/轉儲,調試這需要使用正確的PDB文件(程序調試數據庫)進行分析,使線程堆棧可以進行審查,其中異常/僵局正在發生的事情,從而糾正措施可以被調用。

僅僅通過查看您提供的信息,很難猜出可能出錯的地方,但我的猜測是您有多個後臺工作人員正在進行處理,因此需要訪問資源同步,用lock或類似的構造,因此一個以上的線程不試圖在同一時間訪問它。

另一個問題仍然存在,爲什麼後臺工作者在當天,爲什麼不是Async Await,這將是更清潔的實現,並且不會遇到多線程的挑戰,因爲它不會在單獨的線程上分派調用。

+0

問題是在工人異步事件訪問GUI元素,我把它搬到了工人完成,這個問題是固定的:) ..反正感謝您的幫助... – techno

+0

歡迎,因爲大家都知道的應用程序和其他細節,所以它更容易縮小,否則,這些工具是非常標準的查找和解決這些非functonal問題 –

+0

啊...我想我有一個類似的問題早...花了很多時間來縮小當時的原因。我認爲這個問題現在已經得到解決......可能需要更多的測試。 – techno