如何告诉我何时丢失了Application.ThreadException的EventHandler

时间:2012-04-26 22:30:55

标签: c# .net vb.net

我有一个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的订阅时,有没有人会想到我可以跟踪的方式,这样我就可以从那些偷走它的人那里偷回来了?

2 个答案:

答案 0 :(得分:1)

不幸的是,这是known issue。没有已知的解决方法。

答案 1 :(得分:0)

我想也许我可以用Timer做到这一点。检查是否有人已经订阅了此活动,而不是我,然后重新订阅。我知道这是一个小小的hackey ...只是在想......