2010-10-06 58 views
2

我已經從我的應用程序購買了第三方庫。我的應用程序引用了一個小的interop dll,它又調用另一個dll(非CLI)來完成它的工作。由於這個庫與硬件通信,我想這個DLL會與各種設備驅動程序進行交流。C# - 從Interop異常中恢復

從互操作的dll的典型方法的簽名如下:

[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0xc9)] 
public virtual extern void Send([MarshalAs(UnmanagedType.Struct)] ref object pVal); 

我有這個庫包在一個大的嘗試捕捉(異常)的所有呼叫。如果發送出現任何問題,我需要將其標記爲失敗並繼續。不幸的是,我的應用程序只會隨機關閉,沒有例外。我能做些什麼嗎?這些調用已經在單獨的線程上進行了使用Task.Factory.StartNew(),但整個應用程序都退出了。除了本地try catch之外,還有另外一個包含在StartNew的調用中(我爲了調試目的調用了.Wait())。該捕獲也不會觸​​發。

現在我想唯一的解決方案是創建一個單獨的程序,只需等待另一個關閉,然後重新打開它。這聽起來很可怕......

+0

使用try-catch包裝StartNew()不會捕獲線程上發生的異常。你可以展示「本地」試試看嗎? – 2010-10-06 15:47:38

+0

但呼叫.wait應該。對? – colithium 2010-10-07 02:00:16

+0

圍繞調用的代碼只是一個嘗試{...} catch(Exception){...} – colithium 2010-10-07 03:22:58

回答

0

看看這個blog你可能會得到一個崩潰報告,並在看看哪些電話失敗並報告給你的第三方開發者。

+0

特別是任何帖子?我甚至沒有從窗口收到消息,說我的程序已經停止響應/已經崩潰。它只是靜靜地消失。這讓我覺得DLL正在檢測錯誤情況並退出整個過程而不是正常的路線。 – colithium 2010-10-06 05:50:41

+0

她改變了她的博客,但曾經有一個關於如何獲得崩潰轉儲然後使用windbg分析它的指南 – rerun 2010-10-06 05:57:31