考虑以下应用程序体系结构:我应该如何在线程之间进行同步?
UI(查看)线程创建一个ViewModel。
ViewModels构造函数请求业务逻辑对象(提供者)开始从存储中检索数据。
它通过订阅提供程序的DataRecieved事件并调用StartRetrievingData()方法来完成此操作。
Provider在StartRetrievingData()方法体中创建后台线程,循环遍历获取的数据,并在循环体中引发DataRecieved事件,将实际数据对象作为自定义EventArgs公共字段传递。
一个ViewModel方法,链接到DataRecieved事件,然后更新UI元素绑定到的observableCollection。
的问题是:
一切都ok了这样的架构MVVM implemntation?
我应该在什么时候进行线程同步,即调用Deployment.Current.Dispatcher来调度源自后台线程的调用以更新UI?
非常感谢。我可能应该承认这一点是可耻的,但在你回答之前,我并不知道TPL在.Net中的存在。我的项目仍在Silverlight for Windows Phone上,因此我将无法使用它。便携式TPL不支持我可以看到的TaskFactory。 –
@Maxim:便携式TPL支持这一点 - 但你必须得到TaskScheduler,并明确地将它传递给StartNew方法......不幸的是,它不会让你用自定义调度器创建自己的Factory(不知道为什么 - 但现在在API中缺少) –