【发布时间】:2017-05-31 10:18:28
【问题描述】:
我无法重现该问题(并且项目太大,无法在此处发布,而且我不确定要发布哪些相关部分),我需要了解可能出错的地方在这里。
我有带有静态事件的抽象类
public abstract partial class A : Base
{
public static event EventHandler Test;
public static void OnTest() => Test?.Invoke(null, EventArgs.Empty);
}
然后我正常订阅这个事件并使用WeakEventManager:
A.Test += (s, e) => { };
WeakEventManager<A, EventArgs>.AddHandler(null, nameof(A.Test), (s, e) => { });
并且由于某些原因,当调用 OnTest() 时,弱事件处理程序不会被触发。一切(调用和处理程序)都在 UI 线程中运行。
我已经设置了断点:
- 在
AddHandler()上,它运行,然后类的实例持续存在。 - 在
Invoke()上,它在调用OnTest时运行,如果我调用Test.GetInvocationList(),我可以看到2 个订阅者其中一个是来自WeakEventManager的DeliverEvent(),所以事件已注册并且Invoke()应该调用弱事件处理程序。 - 在正常的事件处理程序中,它运行。
- 在弱事件处理程序中,nothing,这个断点永远不会被命中。
关于为什么会发生这种情况或我应该调查什么的任何想法?
我试图查看 .net sources,在那里找到答案,但有 ProtectedAddHandler 我找不到哪些来源...
我找到了it,但接下来是什么?抽象方法,谁实现的?...
【问题讨论】:
-
你说的是什么抽象方法? ProtectedAddHandler 和 AddHandler 都不是抽象的
-
为了调试这个问题,我会在订阅者类中添加一个终结器,它会输出一条调试消息来通知它何时完成。
标签: c# event-handling weak-events weakeventmanager