有没有办法在最深层次上捕获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,则处理线程不在线程列表中。
非常感谢任何帮助,我甚至无法调试此问题。
答案 0 :(得分:0)
首先,AppDomain.CurrentDomain.UnhandledException不会"捕获"任何东西。如果存在异常,您的应用程序仍将崩溃。这个事件就在那里,所以你可以在崩溃前做一些事情。
其次,你将析构函数与终结符混淆。
第三,如果另一个线程中存在未处理的异常 - 整个应用程序将崩溃。如果它没有崩溃 - 这只能意味着一件事 - 你的线程就完成了工作。
答案 1 :(得分:0)
正确执行此操作的唯一方法是将catch(Exception)放在您在程序中创建的每个线程的根目录中,包括线程池回调方法。