C#捕获失败的线程?

时间:2013-03-12 04:46:30

标签: c#

有没有办法在最深层次上捕获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());
}

尝试捕获失败的访问或null ref。但还是!有些事情导致处理线程停止,而且它不是无限循环,因为如果我在调试器中执行BreakAll,则处理线程不在线程列表中。

非常感谢任何帮助,我甚至无法调试此问题。

2 个答案:

答案 0 :(得分:0)

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

其次,你将析构函数与终结符混淆。

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

答案 1 :(得分:0)

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