0

我有一个未处理的异常处理程序,它执行以下操作:

  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 的订阅时,任何人都可以想出一种我可以跟踪的方法,这样我就可以从从我那里偷走它的人那里偷回来吗?

4

2 回答 2

1

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

于 2012-04-26T22:47:25.633 回答
0

我在想也许我可以用计时器来做到这一点。检查是否有人已经订阅了此活动,并且不是我,然后重新订阅。我知道这有点骇人听闻……只是在想……

于 2012-04-27T17:39:09.307 回答