問題を再現できません (プロジェクトが大きすぎてここに投稿できません。さらに、投稿する関連部分がわかりません)。ここで何がうまくいかないかについてのアイデアが必要です。
静的イベントを持つ抽象クラスがあります
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()
では、 が呼び出されたときに実行されます。そのうちの 1 人がからOnTest
呼び出された場合、2 つのサブスクライバーが表示されるため、イベントが登録され、弱いイベント ハンドラーを呼び出す必要があります。Test.GetInvocationList()
DeliverEvent()
WeakEventManager
Invoke()
- 通常のイベント ハンドラー内で実行されます。
- 弱いイベント ハンドラー内では、何もありません。このブレークポイントはヒットしません。
なぜこれが発生するのか、または何を調査する必要があるのかについてのアイデアはありますか?
そこに答えを見つけるために.netソースを調べようとしましたが、ProtectedAddHandler
見つからないソースがあります...見つかりましたが、次は何ですか? 抽象メソッド、それを実装するのは誰ですか?...