我不能重現這個問題(並且項目太大而無法在此處發佈,另外我不確定相關部分要發佈什麼),我需要什麼可能的想法這裏出錯了。WeakEventManager - 不叫事件處理程序
我有一個靜態的事件
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
被調用時,我可以看到2個用戶,如果我打電話給他們的Test.GetInvocationList()
一個是WeakEventManager
DeliverEvent()
,所以事件進行了登記並Invoke()
應該叫弱的事件處理程序。 - 在正常的事件處理程序中運行。
- 內部弱事件處理程序,什麼都沒有,這個斷點永遠不會被擊中。
任何想法爲什麼會發生這種情況,或者我應該調查什麼?
我試圖尋找到.NET sources,到那裏尋找答案,但有ProtectedAddHandler
它的來源,我找不到...... 我發現it,但什麼是下一個? ?抽象方法,誰實現它...
你在說什麼抽象方法? ProtectedAddHandler和AddHandler都不是抽象的 –
爲了調試這個問題,我將添加一個終結器給訂閱者類,它將輸出一個調試消息以通知它何時完成。 –