在访问数据之前检查异步数据加载是否存在竞争

时间:2014-11-12 08:05:02

标签: c# asynchronous mvvm-light loose-coupling

我使用MVVMlight SimpleIoC容器,尤其是存储大量数据,可在整个应用程序中访问。当应用程序启动时,我启动一个异步过程,准备数据。

private MethodOfOriginalThread()
{
    (new Thread(this.LoadRegistry)).Start();
}

private void LoadRegistry()
{
    int meetingId = SimpleIoc.Default.GetInstance<MeetingDetails>().MeetingId;
    List<Shareholder> registry = this.dataService.SearchRegistry(meetingId, string.Empty);
    SimpleIoc.Default.Register(() => registry);
}

获取数据的过程大约需要10秒钟。完成该过程后,我将数据保存到容器中,如上面的代码所示。

稍后从另一个viewModel我访问此数据:

this.shareholders =
    new NotifyObservableCollection<Shareholder>(
    SimpleIoc.Default.GetInstance<List<Shareholder>>()
);            

在实际加载完成之前进行此访问时会出现问题。由于模型非常松散耦合,我不能互相引用。发送消息可能会产生大量代码,因为这些结果在应用程序中被广泛使用,并且每个视图模型都应该具有消息处理代码。如何检查并等待数据是否已成功加载?一个无限循环,等待容器中所需的对象,听起来中途好,因为操作最终应该完成,但我担心这不是最优雅的解决方案。而且我还需要让用户得到一些数据仍在加载的反馈,因此他耐心等待,并且没有按太多按钮。无限循环和冻结应用程序非常具有挑战性。

0 个答案:

没有答案