我有一个Unhandled Exception处理程序,它执行类似这样的操作:
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的订阅时,有没有人会想到我可以跟踪的方式,这样我就可以从那些偷走它的人那里偷回来了?
答案 0 :(得分:1)
不幸的是,这是known issue。没有已知的解决方法。
答案 1 :(得分:0)
我想也许我可以用Timer做到这一点。检查是否有人已经订阅了此活动,而不是我,然后重新订阅。我知道这是一个小小的hackey ...只是在想......