我怎样才能分派PropertyChanged事件从预订到基于间隔的IObservable
-
25-09-2019 - |
题
我发现了一个“UnauthorizedAccesExpection - 无效的跨线程访问”异常,当我尝试从订阅中提出一个PropertyChanged事件通过Observable.Interval()
创建的IObservable集合。在我有限的知识穿线我假设间隔上一些其他的线程,而该事件要在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
});
其他提示
使用: -
var subscriber = Observable.Interval(TimeSpan.FromSeconds(1))
.Subscribe(x =>
{
Dispatcher.BeginInvoke(() => Prop = x);
});
修改强>
由于需要从视图模型做到这一点看到这个答案通过杰夫·威尔考克斯和他的课题优秀的博客:属性更改通知多线程的Silverlight应用程序。
不隶属于 StackOverflow