2

RX は初めてで、WinForms アプリケーションに適応させようとしています。(Un?)幸いなことに、ビューが特定の実装 (WinForms など) から抽象化される MVP パターンを使用します。

RX フレンドリー モデルが新しい値を生成すると、プレゼンターはそれを取得し、ビューを更新しようとします。問題は、WinForms コントロールへの参照がないため、メイン スレッドで観察できないことです。

いくつかの解決策を見つけましたが、どちらもうまくいきません。

  1. ビューに Control プロパティを作成して、それを観察できるようにします。
  2. プレゼンターによって変更されるプロパティ セッター内で Control.Invoke を使用する
  3. 次のような拡張メソッドを作成します。

:

public static IObservable<T> ObserveOn<T>(this IObservable<T> observable, IMyView view)
{
    var control = (Control)view;
    return observable.ObserveOn(control);
}

これを処理する良い方法はありますか?

編集:私が最も気に入っている別の解決策を見つけました:

private readonly SynchronizationContext _syncContext;

public Presenter()
{
    _syncContext = SynchronizationContext.Current; //I can observe on this one with a reasonable assumption that presenter is created on the UI thread
}
4

1 に答える 1