【发布时间】:2014-03-21 16:53:22
【问题描述】:
我有一个 .NET 应用程序,它在单独的线程中定期调用非托管方法(每 5 秒)。而且这种方法有时会崩溃。我需要以某种方式处理这种情况。主要问题是我无法更改 c++ 非托管代码。
我尝试了不同的方法来处理这个异常,但都没有成功:
-
平常
试试{} 捕捉(例外前) {}
和
try {} catch {}
2
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
3 System.Windows.Threading.Dispatcher.CurrentDispatcher.UnhandledException += CurrentDispatcher_UnhandledException;
4。 Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
无论如何,它只是默默地崩溃。
从逻辑上讲,这个线程应该重新启动,但我知道 Thread.Abort() 是一种不好的做法。这种情况的最佳做法是什么?
提前致谢。
【问题讨论】:
-
您尝试过的具体方法是什么?为什么你不能将有问题的代码包装在
try/catch中? -
try/catch 没有帮助。我也试过: 1. AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 2. System.Windows.Threading.Dispatcher.CurrentDispatcher.UnhandledException += CurrentDispatcher_UnhandledException; 3. Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
-
编辑您的问题以添加您尝试过的内容。特别是显示您尝试的 try/catch 并解释它为什么不起作用。它是静默崩溃还是抛出了其他异常?
-
另外,您确定错误出在 C++ 代码中吗?您是否有可能将一个对未固定在内存中的数组的引用传递给它?如果在垃圾回收期间移动数组,这可能会导致 C++ 代码崩溃。
-
吉姆,完成。我已经编辑了问题。它无声地崩溃。
标签: .net multithreading exception exception-handling unmanaged