C#-反应性扩展ControlScheduler
作者:互联网
好吧,我正在使用ReactiveExtensions事件处理程序来处理我的应用程序事件,我也使用ControlScheduler以在ui线程上运行处理程序.但是,尽管使用了ControlScheduler,最近我还是遇到了“跨线程”异常,我不知道这是什么问题
码:
Observable.FromEventPattern<string>(cc, "UiAlertMessage", new ControlScheduler(this)).Subscribe(_ =>
{
AlertControl.Show(this, Language.Title, _.EventArgs.UppercaseFirst());
});
新的ControlScheduler(this)是否应该在UI线程上运行代码,所以我没有遇到“交叉线程”异常?
解决方法:
你应该在做
Observable.FromEventPattern<string>(cc, "UiAlertMessage")
.ObserveOn(this)
.Subscribe(_ =>
{
AlertControl.Show(this, Language.Title, _.EventArgs.UppercaseFirst());
});
这是与特定控件相关的调度到调度程序的标准方法.如您所愿地传递控件计划,则订阅该控件而不是对其进行观察.有关ObserverOn和SubscribeOn之间的区别,请参见this answer
请注意,ObserveOn的实现来自System..Reactive.Windows.Forms程序集.
public static IObservable<TSource> ObserveOn<TSource>
(this IObservable<TSource> source, Control control)
{
if (source == null)
throw new ArgumentNullException("source");
if (control == null)
throw new ArgumentNullException("control");
else
return Synchronization.ObserveOn<TSource>(source, (IScheduler) new ControlScheduler(control));
}
标签:system-reactive,c 来源: https://codeday.me/bug/20191029/1963358.html