2013-03-12 27 views
0

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

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

任何帮助将不胜感激,我甚至不能调试这个问题。

+1

请耐心地写下这个问题,有些好友需要了解问题是什么?请重新说明它。 – TalentTuner 2013-03-12 04:50:18

+0

我没有看到误解? (new Thread(IOThread.run))运行常规终止线程的一些方法。 – 2013-03-12 04:52:56

+0

您应该发布线程委托(IOThread.run)的完整代码。 – 2013-03-12 05:17:05

回答

0

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

其次,你使用终结器混淆了析构函数。

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

+0

如何在工作完成时钩住/捕捉?我不知道如何诊断这一点。 – 2013-03-12 12:02:28

+0

@Vans S:在Visual Studio中添加一个断点(右击 - >断点 - >插入) – 2013-03-12 13:53:11

0

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