在我的ViewModel中,我有以下代码:
Logs = new ObservableCollection<Log>();
Logs = Task.Factory.StartNew(() => mainModel.GetLogs()).Result;
日志是一个非常简单的类,具有几个公共(public)属性。
根据我对Task类的理解,以这种方式调用的mainModel函数GetLogs()应该在单独的线程上运行,并且在从数据库中获取记录时,我的UI应该是响应性的,但是这不是正在发生的事情,而是在记录正在运行时从数据存储区提取的我的UI被阻止。
我希望有人能解释为什么... TIA。
编辑:我对Task类的了解不完整,使用Task类的ContinueWith方法将确保异步执行,如下成员答复中所述...
最佳答案
这是因为您在启动异步操作后立即调用Result
。 Result
属性的getter阻止当前线程的执行,直到任务完成。
更新:
为了异步获取结果,您需要调用ContinueWith
并指定一个在任务完成时将要调用的函数:
Task.Factory.StartNew(() => mainModel.GetLogs()).ContinueWith(t => Logs = t.Result);