問題タブ [weakeventmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1092 参照

c# - WeakEventManager と静的イベント

私は慣れようとしてWeakEventManagerいますが、次のことにつまずきます:



との唯一の違いはA、コピー/貼り付けエラーを無視してください ;)Bstaticnameof

ジェネリックと静的型に関するこの回答を見つけましたが、それで何WeakEventManagerをしているのだろうかA? どういうわけかnull、静的イベントのソースとして機能します。

staticなぜイベントが大丈夫なのか、簡単な答えを探していますがstatic classTEventSource突然そうではありません。


コード:

エラー:

エラー CS0718
'B': 静的型は型引数として使用できません

0 投票する
1 に答える
6908 参照

c# - タイプでイベントが見つかりません

次の例外があります

タイプ 'System.ArgumentException' の未処理の例外が WindowsBase.dll で発生しました

追加情報: タイプ「ConsoleApplication.ITest」で「イベント」イベントが見つかりません。

この再現では:

インターフェイス経由で継承されたイベントが見つからないのはなぜですか? このメソッドから例外がスローされます。

0 投票する
1 に答える
49 参照

c# - WeakEventManager ハンドラの追加と従来のハンドラの追加の違いを隠すクラスを作成することは可能ですか?

多くのイベントを使用する C# (.NET 4.6.1) プロジェクトがあります。私はすべてのイベント ハンドラーを新しい WeakEventManager パターンに移動したいと思っています。これは、メモリー リークを回避するためにハンドラーの登録解除について果てしなく心配することを避けるためです。

ただし、パフォーマンスについて多くのテストを行う必要があり、2 つの方法を簡単に切り替える方法が必要です。これまでのところ、次の行に沿ってこれを行うために条件付きコンパイルを使用してきました。

これは機能しますが、面倒です。理想的には、これを隠すクラスを作成したいと思います。つまり、いずれかのメソッドを内部的に使用できるクラスを作成します。次に、すべてのソースを変更して、ハンドラーを新しいクラスにアタッチし、簡単に切り替えることができます (または、将来的に新しいメソッドに移動することもできます)。

ただし、イベントをパラメーターとして渡すことができないため、そのクラスの記述方法がわかりません。また、ハンドラー/名前で何らかのリフレクションが行われる必要がありますが、これは私を超えています。

それを行う簡単な方法はありますか?

0 投票する
1 に答える
926 参照

c# - WeakEventManager - イベント ハンドラが呼び出されない

問題を再現できません (プロジェクトが大きすぎてここに投稿できません。さらに、投稿する関連部分がわかりません)。ここで何がうまくいかないかについてのアイデアが必要です

静的イベントを持つ抽象クラスがあります

次に、通常どおりこのイベントにサブスクライブし、次を使用しWeakEventManagerます。

また、何らかの理由で、呼び出されたときに弱いイベント ハンドラーが起動されませんOnTest()。すべて (呼び出しとハンドラー) は UI スレッドで動作します。

ブレークポイントを設定しました:

  1. で実行AddHandler()され、クラスのインスタンスが保持されます。
  2. Invoke()では、 が呼び出されたときに実行されます。そのうちの 1 人がからOnTest呼び出された場合、2 つのサブスクライバーが表示されるため、イベントが登録され、弱いイベント ハンドラーを呼び出す必要があります。Test.GetInvocationList()DeliverEvent()WeakEventManagerInvoke()
  3. 通常のイベント ハンドラー内で実行されます。
  4. 弱いイベント ハンドラー内では、何もありません。このブレークポイントはヒットしません。

なぜこれが発生するのか、または何を調査する必要があるのか​​についてのアイデアはありますか?


そこに答えを見つけるために.netソースを調べようとしましたが、ProtectedAddHandler見つからないソースがあります...見つかりましが、次は何ですか? 抽象メソッド、それを実装するのは誰ですか?...

0 投票する
0 に答える
178 参照

wpf - WPF は IsEnabledChanged イベントに弱くサブスクライブします

イベントを弱くサブスクライブすることは可能ですか? どちらもUIElement.IsEnabledChanged

WeakEventManager<TEventSource, TEventArgs>

DependencyPropertyChangedEventArgs伸びないので効きそうTEventArgsです。
PropertyChangedEventManager

UIElement実装していないので動作しますINotifyPropertyChanged! 人々がそのイベントを安全にサブスクライブするにはどうすればよいでしょうか?