当我尝试从通过Observable.Interval()创建的IObservable集合的预订中引发PropertyChanged事件时,出现“UnauthorizedAccesExpection-无效的跨线程访问”异常。
以我有限的线程知识,我假设间隔发生在某个其他线程上,而该事件想发生在UI线程上???对问题的解释将非常有用。
该代码看起来像:
var subscriber = Observable.Interval(TimeSpan.FromSeconds(1))
.Subscribe(x =>
{
Prop = x; // setting property raises a PropertyChanged event
});
有什么办法吗?
编辑:
此代码是从ViewModel而不是DependencyObject执行的。
最佳答案
编辑:我在将SubscribeOn与ObserveOn混淆了。我已经更新了答案
您可以通过将时间间隔放在调度程序线程上来解决问题:
var subscriber = Observable.Interval(TimeSpan.FromSeconds(1), Scheduler.Dispatcher)
.Subscribe(x =>
{
Prop = x; // setting property raises a PropertyChanged event
});
另外,您也可以使用
ObserveOnDispatcher
,但这会涉及到跳跃线程,因此我建议您反对使用:var subscriber = Observable.Interval(TimeSpan.FromSeconds(1))
.ObserveOnDispatcher()
.Subscribe(x =>
{
Prop = x; // setting property raises a PropertyChanged event
});
关于c# - 如何将PropertyChanged事件从订阅分派(dispatch)到基于Interval的IObservable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2591627/