0

次のような処理を行う未処理の例外ハンドラーがあります。

  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のサブスクリプションを失ったときに追跡できる方法を誰かが考えて、それを盗んだ人からそれを盗むことができますか?

4

2 に答える 2

1

残念ながら、これは既知の問題です。既知の回避策はありません。

于 2012-04-26T22:47:25.633 に答える
0

多分タイマーでこれができると思います。誰かがすでにこのイベントに登録していて、それが私ではないかどうかを確認してから、再登録してください。私はこれが少しハッキーであることを知っています...ただ考えています...

于 2012-04-27T17:39:09.307 に答える