Ale*_*gin 1 .net multithreading exception-handling unmanaged exception
我有一个.NET应用程序,它在单独的线程中(每5秒一次)定期调用非托管方法。而且这种方法有时会崩溃。我需要以某种方式处理这种情况。主要问题是我无法更改c ++非托管代码。
我尝试了不同的方式来处理此异常,但是没有成功:
通常
尝试{}捕获(异常例外){}
和
try {} catch {}
Run Code Online (Sandbox Code Playgroud)
2
AppDomain.CurrentDomain.UnhandledException + = CurrentDomain_UnhandledException;
3 System.Windows.Threading.Dispatcher.CurrentDispatcher.UnhandledException + = CurrentDispatcher_UnhandledException;
4. Application.Current.DispatcherUnhandledException + = Current_DispatcherUnhandledException;
无论如何,它只是默默地崩溃。
从逻辑上讲,应该重新启动该线程,但是我知道Thread.Abort()是一种不好的做法。在这种情况下的最佳做法是什么?
提前致谢。
如果非托管代码使您的进程崩溃,那么您将不走运。没有异常传播到托管代码。避免此类崩溃的唯一方法是在一个单独的进程中启动非托管代码,而不仅仅是线程。然后,您可以根据需要使用进程间通信来交换数据,并在崩溃时重新启动进程。
同样,Thread.Abort这不仅是一种不好的做法-当线程处于非托管代码内部时(例如,非托管代码“挂起”时),它也完全不会为您提供帮助。Thread.Abort将只允许中止线程,因为它退出了托管代码。