你能趕上使用這些事件2從其他線程拋出的異常:
System.Windows.Forms.Application.ThreadException += Application_ThreadException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
// Set the unhandled exception mode to force all Windows Forms errors to go through our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
您可能還需要設置你的App.config文件如下:
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<runtime>
<legacyUnhandledExceptionPolicy enabled="1" />
</runtime>
...
如果你可以」使用託管代碼工作,下面的代碼將捕捉本地(C++)代碼中的所有內容(不確定是否可以PInvoke):
//Sets the handler for a pure virtual function call.
_set_purecall_handler(&MyPureVirtualCallHandler);
// Sets the handler function to be called when invalid parameters are passed to C runtime functions
_set_invalid_parameter_handler(&MyInvalidParameterHandler);
//Register an unhandled exception filter
SetUnhandledExceptionFilter(&UnhandExceptionFilter);
這不能直接完成。 在本機代碼中處理異常,並在發生異常時從本機代碼返回適當的數據。在託管代碼中,您可以通過檢查返回的值/數據來知道是否發生任何異常。 – Narendra
@Narendra可能在DirectX中發生異常,正如我在問題中提到的那樣,這是一個專有組件。我無法改變任何處理異常的方法。 – Acrotygma