我有一个未处理的异常处理程序,它执行以下操作:
AddHandler Application.ThreadException, AddressOf Application_ThreadException
我正在查看这到底意味着什么,并注意到 Application 的反编译代码显示:
/// <include file='doc\Application.uex' path='docs/doc[@for="Application.ThreadException"]/*' />
/// <devdoc>
/// <para>Occurs when an untrapped thread exception is thrown.</para>
/// </devdoc>
public static event ThreadExceptionEventHandler ThreadException {
add {
Debug.WriteLineIf(IntSecurity.SecurityDemand.TraceVerbose, "AffectThreadBehavior Demanded");
IntSecurity.AffectThreadBehavior.Demand();
ThreadContext current = ThreadContext.FromCurrent();
lock(current) {
current.threadExceptionHandler = value;
}
}
remove {
ThreadContext current = ThreadContext.FromCurrent();
lock(current) {
current.threadExceptionHandler -= value;
}
}
}
因此,从“添加”看来,订阅 Application.ThreadException 的最后一个人是获得它的人(它不像大多数事件处理程序那样是附加的)。无论如何,我都不想放弃对这个事件处理程序的订阅。当我失去对 Application.ThreadException 的订阅时,任何人都可以想出一种我可以跟踪的方法,这样我就可以从从我那里偷走它的人那里偷回来吗?