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

C# 在访问数据之前检查异步数据加载是否竞争,c#,asynchronous,mvvm-light,loose-coupling,C#,Asynchronous,Mvvm Light,Loose Coupling,我正在使用MVVMlight SimpleIoC容器,尤其是用来存储大量数据,这些数据可以在整个应用程序中访问。当应用程序启动时,我启动一个异步进程来准备数据 private MethodOfOriginalThread() { (new Thread(this.LoadRegistry)).Start(); } private void LoadRegistry() { int meetingId = SimpleIoc.Default.GetInstance<Meet

我正在使用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);
}
private MethodOfOriginalThread()
{
(新线程(this.LoadRegistry)).Start();
}
私有void LoadRegistry()
{
int meetingId=SimpleIoc.Default.GetInstance().meetingId;
List registry=this.dataService.SearchRegistry(meetingId,string.Empty);
simpleoc.Default.Register(()=>注册表);
}
获取数据的过程大约需要10秒钟。流程完成后,我将数据保存到容器中,如上面的代码所示

稍后,我将从另一个viewModel访问以下数据:

this.shareholders =
    new NotifyObservableCollection<Shareholder>(
    SimpleIoc.Default.GetInstance<List<Shareholder>>()
);            
this.com=
新的可观测集合(
SimpleIoc.Default.GetInstance()
);            
当在实际加载完成之前进行此访问时,会出现问题。由于VIE模型是松散耦合的,因此我无法从另一个模型中引用它们。发送消息可能会产生大量代码,因为这些结果在应用程序中被广泛使用,并且每个viewmodel都应该有消息处理代码。如何检查并等待数据是否已成功加载?在容器中等待所需对象的无休止循环听起来还行,因为操作最终应该完成,但我担心这不是最优雅的解决方案。我还需要让用户得到一些反馈,数据仍在加载中,因此他耐心等待,并且不会按太多按钮。对于无止境的循环和冻结的应用程序来说,这是非常具有挑战性的