wpf – 为什么我的UI在使用System.Threading.Task类时会被阻止?
发布时间:2020-12-20 11:18:45 所属栏目:Python 来源:网络整理
导读:在我的ViewModel中,我有这样的代码: Logs = new ObservableCollectionLog();Logs = Task.Factory.StartNew(() = mainModel.GetLogs()).Result; Log是一个非常简单的类,有几个公共属性. 根据我对Task类的理解,以这种方式调用的mainModel函数GetLogs()应该在
在我的ViewModel中,我有这样的代码:
Logs = new ObservableCollection<Log>(); Logs = Task.Factory.StartNew(() => mainModel.GetLogs()).Result; Log是一个非常简单的类,有几个公共属性. 根据我对Task类的理解,以这种方式调用的mainModel函数GetLogs()应该在一个单独的线程上运行,当它从数据库中获取记录时,我的UI应该是响应的,但是这不是正在发生的事情,而是在记录正在进行时从数据存储中获取我的UI被阻止. 我希望有人可以解释为什么…… TIA. 编辑:我对Task类的不足之处是不完整的,使用Task类的ContinueWith方法将确保异步执行,如下面在成员回复中所解释的… 解决方法
这是因为您在启动异步操作后立即调用Result. Result属性的getter阻止当前线程的执行,直到任务完成.
更新: 为了异步获取结果,您需要调用ContinueWith并指定在任务完成时将调用的函数: Task.Factory.StartNew(() => mainModel.GetLogs()).ContinueWith(t => Logs = t.Result); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |