gpt4 book ai didi

c# - 异步等待 - 避免阻塞 UI 是正确的想法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:32 29 4
gpt4 key购买 nike

我认为使用 await/async 是确保响应式 UI 的最佳想法。但我似乎做错了什么,因为我的应用程序无论如何都会卡住。

我尝试做的事情:Button 已启动,应该等待一个持久的操作。

public async Task CmdLoadExcel()
{
// läd die excel datei
string[] excelFiles = this.GetExcelFiles();
ExcelLoader eloader = new ExcelLoader();
await eloader.StartLoading(excelFiles);
foreach (DataSet elem in eloader.Tables)
{
this.ActivateItem(new ExcelViewModel(elem) { DisplayName = elem.DataSetName });
}
}

启动类:

public async Task StartLoading(string[] files)
{
foreach (string file in files)
{
Stopwatch swatch = new Stopwatch();
swatch.Start();
System.Threading.Thread.Sleep(5000);
FileInfo finfo = new FileInfo(file);
using (ExcelPackage package = new ExcelPackage(finfo))
{
// very long operation
}
} // For Each
} // StartLoading

它只是在 sleep 时停止,我不确定我做错了什么。

最佳答案

用 async 和 await 标记方法本身并没有真正做任何事情。您需要等待一个任务:

这会有所帮助:

public async Task StartLoading(string[] files)
{
return Task.Run(() =>
{
foreach (string file in files)
{
Stopwatch swatch = new Stopwatch();
swatch.Start();
System.Threading.Thread.Sleep(5000);
FileInfo finfo = new FileInfo(file);
using (ExcelPackage package = new ExcelPackage(finfo))
{
// very long operation
}
} // For Each
};
} // StartLoading

关于c# - 异步等待 - 避免阻塞 UI 是正确的想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16015837/

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