問題タブ [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.
c# - WeakEventManager と静的イベント
私は慣れようとしてWeakEventManager
いますが、次のことにつまずきます:
との唯一の違いはA
、コピー/貼り付けエラーを無視してください ;)B
static
nameof
ジェネリックと静的型に関するこの回答を見つけましたが、それで何WeakEventManager
をしているのだろうかA
? どういうわけかnull
、静的イベントのソースとして機能します。
static
なぜイベントが大丈夫なのか、簡単な答えを探していますがstatic class
、TEventSource
突然そうではありません。
コード:
エラー:
エラー CS0718
'B': 静的型は型引数として使用できません
c# - タイプでイベントが見つかりません
次の例外があります
タイプ 'System.ArgumentException' の未処理の例外が WindowsBase.dll で発生しました
追加情報: タイプ「ConsoleApplication.ITest」で「イベント」イベントが見つかりません。
この再現では:
インターフェイス経由で継承されたイベントが見つからないのはなぜですか? このメソッドから例外がスローされます。
c# - WeakEventManager ハンドラの追加と従来のハンドラの追加の違いを隠すクラスを作成することは可能ですか?
多くのイベントを使用する C# (.NET 4.6.1) プロジェクトがあります。私はすべてのイベント ハンドラーを新しい WeakEventManager パターンに移動したいと思っています。これは、メモリー リークを回避するためにハンドラーの登録解除について果てしなく心配することを避けるためです。
ただし、パフォーマンスについて多くのテストを行う必要があり、2 つの方法を簡単に切り替える方法が必要です。これまでのところ、次の行に沿ってこれを行うために条件付きコンパイルを使用してきました。
これは機能しますが、面倒です。理想的には、これを隠すクラスを作成したいと思います。つまり、いずれかのメソッドを内部的に使用できるクラスを作成します。次に、すべてのソースを変更して、ハンドラーを新しいクラスにアタッチし、簡単に切り替えることができます (または、将来的に新しいメソッドに移動することもできます)。
ただし、イベントをパラメーターとして渡すことができないため、そのクラスの記述方法がわかりません。また、ハンドラー/名前で何らかのリフレクションが行われる必要がありますが、これは私を超えています。
それを行う簡単な方法はありますか?
c# - WeakEventManager - イベント ハンドラが呼び出されない
問題を再現できません (プロジェクトが大きすぎてここに投稿できません。さらに、投稿する関連部分がわかりません)。ここで何がうまくいかないかについてのアイデアが必要です。
静的イベントを持つ抽象クラスがあります
次に、通常どおりこのイベントにサブスクライブし、次を使用しWeakEventManager
ます。
また、何らかの理由で、呼び出されたときに弱いイベント ハンドラーが起動されませんOnTest()
。すべて (呼び出しとハンドラー) は UI スレッドで動作します。
ブレークポイントを設定しました:
- で実行
AddHandler()
され、クラスのインスタンスが保持されます。 Invoke()
では、 が呼び出されたときに実行されます。そのうちの 1 人がからOnTest
呼び出された場合、2 つのサブスクライバーが表示されるため、イベントが登録され、弱いイベント ハンドラーを呼び出す必要があります。Test.GetInvocationList()
DeliverEvent()
WeakEventManager
Invoke()
- 通常のイベント ハンドラー内で実行されます。
- 弱いイベント ハンドラー内では、何もありません。このブレークポイントはヒットしません。
なぜこれが発生するのか、または何を調査する必要があるのかについてのアイデアはありますか?
そこに答えを見つけるために.netソースを調べようとしましたが、ProtectedAddHandler
見つからないソースがあります...見つかりましたが、次は何ですか? 抽象メソッド、それを実装するのは誰ですか?...
wpf - WPF は IsEnabledChanged イベントに弱くサブスクライブします
イベントを弱くサブスクライブすることは可能ですか?
どちらもUIElement.IsEnabledChanged
WeakEventManager<TEventSource, TEventArgs>
DependencyPropertyChangedEventArgs
伸びないので効きそうTEventArgs
です。
もPropertyChangedEventManager
UIElement
実装していないので動作しますINotifyPropertyChanged
! 人々がそのイベントを安全にサブスクライブするにはどうすればよいでしょうか?