当我尝试从对通过 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 事件从订阅发送到基于 Interval 的 IObservable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2591627/