0

有没有办法在 C# 中捕获最深层次的终止线程?我目前有:

AppDomain.CurrentDomain.UnhandledException += new System.UnhandledExceptionEventHandler(App_ThreadException);

在开始时

~IOThread()
{
    Console.WriteLine(string.Format("IOThread destroyed at: {0}", DateTime.Now));
}

一个析构函数。

一个

try
{
    Server.world.Tick();
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

尝试捕获失败的访问或空引用。但仍!某些原因导致处理线程停止,并且它不是无限循环,因为如果我在调试器中执行 BreakAll,则处理线程不在线程列表中。

任何帮助将不胜感激,我什至无法调试此问题。

4

2 回答 2

0

正确执行此操作的唯一方法是将 catch(Exception) 放在您在程序中创建的每个线程的根目录中,包括线程池回调方法。

于 2013-03-12T05:53:28.797 回答
0

首先 AppDomain.CurrentDomain.UnhandledException 不会“捕获”任何东西。如果出现异常,您的应用程序仍然会崩溃。这个事件在那里,所以你可以在崩溃之前做一些事情。

其次,您将析构函数与终结器混淆了。

第三,如果另一个线程中存在未处理的异常——整个应用程序将崩溃。如果它没有崩溃——那只能意味着一件事——你的线程就完成了工作。

于 2013-03-12T05:12:16.853 回答