如何判断何时丢失了 Application.ThreadException 的事件处理程序
本文关键字:Application ThreadException 程序 事件处理 何时丢 何判断 判断 | 更新日期: 2023-09-27 18:32:26
我有一个未处理的异常处理程序,它执行以下操作:
AddHandler Application.ThreadException, AddressOf Application_ThreadException
我正在研究这到底意味着什么,并注意到应用程序的反编译代码显示:
/// <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 的订阅时,我可以跟踪它,这样我就可以从从我那里偷走它的人那里偷回它?
不幸的是,
这是一个已知问题。没有已知的解决方法。
我想也许我可以用计时器做到这一点。检查是否有人已经订阅了此活动,而不是我,然后重新订阅。我知道这有点笨拙...只是想...