次のような処理を行う未処理の例外ハンドラーがあります。
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のサブスクリプションを失ったときに追跡できる方法を誰かが考えて、それを盗んだ人からそれを盗むことができますか?