【发布时间】:2013-07-01 16:56:00
【问题描述】:
我是 RX 的新手,我正在尝试使其适应我的 WinForms 应用程序。 (不?)幸运的是,我使用 MVP 模式,其中视图是从任何特定实现(例如 WinForms)中抽象出来的。
当 RX-friendly 模型产生新值时,presenter 获取它并尝试更新视图。问题是我无法在主线程上观察,因为我没有引用 WinForms 控件。
我找到了一些解决方案,但它们都不适合我:
- 在视图中创建一个 Control 属性,以便我可以对其进行观察。
- 在由 Presenter 修改的属性设置器中使用 Control.Invoke
- 创建类似于以下内容的扩展方法:
:
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
}
【问题讨论】:
标签: c# winforms system.reactive mvp scheduler