問題タブ [weak-events]
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# - Reactive 拡張機能の PCL WeakEventManager は、3 ~ 7 分でイベントを破棄します
Reactive ライブラリを使用して PCL に WeakEventManager を実装しようとしています。
つまり、サブスクライバーの弱参照を保持し、イベントが発生するたびに、サブスクライバーのデリゲートを取得してそれを起動しますが、弱参照からオブジェクトを取得できなかった場合は、へのリンクを破棄しますデリゲート。
問題は、しばらくすると弱い参照が null を返し (ただし、サブスクライバーはまだ生きている)、その後リンクの破棄が実行されることです。だから私の質問は、なぜこれが起こっているのか、それを修正する方法は?
これがどのように見えるかです:(コード内のメモを見てください)
次に、そのマネージャーを使用してサブスクライブする方法を次に示します。
そして私のイベント発行者:
最後に、WeakEventManager クラスの完全なコード:
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
! 人々がそのイベントを安全にサブスクライブするにはどうすればよいでしょうか?