使用.Net Framework 1.1,有哪些选项可用于监视来自其他线程的线程?我试图处理1.1中线程实现的缺点,其中未处理的异常将导致线程无声地死亡 . 在2.0及更高版本中,这已得到纠正,因此任何线程上的任何未处理的异常都将导致整个应用程序死亡,我相信 .
当我的应用程序中的线程死亡时,我想从主线程中检索尽可能多的上下文:它们正在执行的方法,堆栈跟踪等 . 我可以确定它们何时死亡但是检索上下文已经证明是困难的 . 我已经尝试为 AppDomain.CurrentDomain.UnhandledException
事件注册处理程序 . 但是当事件发生时我没有回电话 . 这可能是由于我正在开发的API的限制 .
除了这个事件,还有哪些选项可以从线程获取上下文,因为它们在另一个线程上死掉了?
4 回答
你是如何创建这些线程的?您是否在线程池中添加了委托?如果是这样,您可以创建一个包装器方法,该方法接受所提供的委托并包装它周围的另一个委托,它负责您的try / catch,然后将该新委托添加到线程池队列中 . 这样你就可以在第二个委托中输入你的错误处理代码 .
您可以尝试添加线程异常处理程序:
System.Threading.ThreadExceptionEventArgs e将包含有关未处理异常的信息 .
资料来源:http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx
如何通过线程ID索引的映射中每个线程的递增计数?当它停止递增时,死亡和时间被杀死和/或重新启动它 . Map 可以包含管理所有这些所需的一切,并在托管线程和那些讨厌的小孩之间共享信息 .
我将创建一个方法,它将接受您通常会传递给线程的回调,然后在一些包装器代码中调用,您将用它来跟踪线程中的异常,如下所示: