如何判断何时丢失了 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 的订阅时,我可以跟踪它,这样我就可以从从我那里偷走它的人那里偷回它?

如何判断何时丢失了 Application.ThreadException 的事件处理程序

不幸的是,

这是一个已知问题。没有已知的解决方法。

我想也许我可以用计时器做到这一点。检查是否有人已经订阅了此活动,而不是我,然后重新订阅。我知道这有点笨拙...只是想...