提问人:Rich 提问时间:9/18/2023 最后编辑:Rich 更新时间:9/19/2023 访问量:91
WPF ViewModel AsyncCommand 冻结整个 UI
WPF ViewModel AsyncCommand Freeze whole UI
问:
我正在开发一个简单的应用程序,该应用程序具有负责通过 MediatR 加载数据的单个数据网格。为了便于在单击按钮时进行数据刷新,我实现了一个 AsyncCommand,从一篇特定文章中汲取灵感。但是,在触发 refreshBtnCommand 时,我遇到了一个问题,即每次重新加载数据或在不同页面之间交换时,整个 UI 都会冻结几秒钟。我不确定这个问题的根源,非常感谢任何解决方案或指导来纠正它。
public class MainPageViewModel : BindableBase
{
public IAsyncRelayCommand DownloadTextCommand { get; private set; }
private readonly IRepositoryManager _RepositoryManager;
public MainPageViewModel(IRepositoryManager RepositoryManager)
{
RefreshBtnCommand = new AsyncRelayCommand(runTest);
}
public async Task runTest()
{
await Task.Run(() => {
int i = 0;
while (true) {
if (i++ == int.MaxValue) break;
}
});
await _RepositoryManager.TestRepository.Test();
}
}
Xaml
<Grid>
<Button x:Name="button" Command="{Binding DownloadTextCommand}"/>
</Grid>
存储 库
public class TestRegisterRepository : ITestRegisterRepository
{
private new readonly ModelContext _modelContext;
public TestRegisterRepository (ModelContext repositoryContext)
{
_modelContext = repositoryContext;
}
public async Task<List<DataTable>> Test() {
return await Task.Run(() => this._modelContext.DataTable.Take(1000).ToListAsync());
//return await this._modelContext.DataTable.Take(1000).ToListAsync(); //Freeze UI
}
}
答: 暂无答案
评论
Task.Run
Task
ToListAsync
IsCompleted
false
true