gpt4 book ai didi

c# - 使用任务,但用户界面仍然被阻止

转载 作者:行者123 更新时间:2023-12-03 10:52:44 24 4
gpt4 key购买 nike

我有一个WPF MVVM C#应用程序。在我的一种 View 中,单击按钮后,我必须从数据库中检索数据。
对数据库的调用确实很长,因此我想在进行调用时启用微调器,并在调用完成时禁用它。

因此,在处理按钮单击的方法中(使用Command,而不是后面的代码),我设置了boolean变量以启用微调器,然后创建一个Task来获取数据并将其设置为ObservableCollection<T>这样

private void GetDataButtonCommand() {
this.IsBusy = true;
var tasks = new List<Task>();

tasks.Add(Task.Factory.StartNew(() =>
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(new System.Action(() =>
{
var GotData= DBHelper.GetData();
_observablecollectionname.Clear();
foreach (var item in GotData)
{
_observablecollectionname.Add(item);
}
}));
}));

var finalTask = Task.Factory.ContinueWhenAll(tasks.ToArray(), datacomplete =>
{
this.IsBusy = false;
});
}

完成 Task后,我想禁用微调器。

我遇到的问题是在通话过程中看不到微调框。即使您正在使用 Task来执行数据库查询,UI仍被阻止。

我究竟做错了什么?

最佳答案

您的代码在UI thead上运行。

您可以使用System.Windows.Application.Current.Dispatcher.BeginInvoke(new System.Action(() => { ... }))进行所有操作,因此自然会阻塞UI。

仅在确实需要执行UI操作时才应调用调度程序。

var GotData= DBHelper.GetData();移到调度程序之前。

但是最好使用C#5.0及更高版本的async/await模式/关键字。

关于c# - 使用任务,但用户界面仍然被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35211160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com