【发布时间】:2013-12-03 10:12:17
【问题描述】:
涉及的类:
- 作为儿童控件容器的经典 MVVM。
- 具有自己的视图模型的子控件(具体为按钮)。
- BackgroundWorker 通过套接字轮询远程主机。
行为:
- 主应用程序开始从 XML 列表加载子控件。 每个 Child 都有父视图中的更新事件的处理程序 模型(我们称之为主视图模型)更新 孩子。
- Main ViewModel 启动一个 BackgroundWorker
- BackgroundWorker 调用 Socket 方法并使用 ViewModel 回调进行响应。
- 回调更新 Main ViewModel 属性。
因为在这里它工作得很好,但是:
- 更新后的属性会在集合中引发一个事件,并且 Children 处理程序从他们自己的属性更新开始。
- 更新时引发异常:
调用线程无法访问该对象,因为不同的 线程拥有它。
几秒钟后按钮更新。我猜是因为 UI 线程再次获得了控制权并更新了控件。但是,有没有更好的方法来处理这个问题?
【问题讨论】:
标签: c# wpf events mvvm backgroundworker