問題タブ [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.

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

c# - Reactive 拡張機能の PCL WeakEventManager は、3 ~ 7 分でイベントを破棄します

Reactive ライブラリを使用して PCL に WeakEventManager を実装しようとしています。

つまり、サブスクライバーの弱参照を保持し、イベントが発生するたびに、サブスクライバーのデリゲートを取得してそれを起動しますが、弱参照からオブジェクトを取得できなかった場合は、へのリンクを破棄しますデリゲート。

問題は、しばらくすると弱い参照が null を返し (ただし、サブスクライバーはまだ生きている)、その後リンクの破棄が実行されることです。だから私の質問は、なぜこれが起こっているのか、それを修正する方法は?

これがどのように見えるかです:(コード内のメモを見てください)

次に、そのマネージャーを使用してサブスクライブする方法を次に示します。

そして私のイベント発行者:

最後に、WeakEventManager クラスの完全なコード:

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! 人々がそのイベントを安全にサブスクライブするにはどうすればよいでしょうか?