Перехват исключений собственного кода в .NET

В настоящее время я работаю с ffmpeg с проприетарной оболочкой, и мне нужно перехватить исключения из собственного кода, которые иногда возникают во время процедур перекодирования и т. Д.

Я уже прочитал эти вопросы / ответы:

https://stackoverflow.com/questions/10517199/cant-catch-native-exception-in-managed-code
https://stackoverflow.com/questions/150544/can-you-catch-a-native-exception-in-c-sharp-code

Однако они не очень помогли, поскольку исключения возникают не во время вызова функции, а в совершенно другом потоке, который работает бок о бок в библиотеке ffmpeg и генерируется дополнительными компонентами, такими как DirectX. Это как-то реальная проблема, так как исключения разрушают все мое приложение!

Любая помощь очень ценится.

0

Решение

Вы можете ловить исключения, выданные из других потоков, используя эти 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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]