我无法重现这个问题(项目太大了,无法在此发布,加上我不确定要发布的相关部分)我需要了解可能出错的内容这里。
我有静态事件的抽象类
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个订阅者,其中一个是来自DeliverEvent()
的{{1}},所以事件已注册,WeakEventManager
应调用弱事件处理程序。有关为什么会发生这种情况或我应该调查什么的任何想法?
我试图查看.net sources,在那里找到答案,但有Invoke()
哪些来源我找不到...
我发现了it,但下一步是什么?抽象方法,谁实现它?...
答案 0 :(得分:0)
WeakEventManager
...没有工作的事件处理程序......
对于遇到此问题的任何人,问题是:您必须使用static
作为null
举起sender
个活动!例如。在我的情况下它是(用这个来重现问题中代码的问题):
public static void OnTest() => Test?.Invoke("whatever", EventArgs.Empty);
此案例将由普通订阅者处理,没有任何问题。
但是在WeakEventManager
的情况下,它必须是null
(特殊情况),否则您的事件处理程序将无效。