我正在开展一个项目,我需要一些帮助。这是一段代码:
private void MassInvoiceExecuted()
{
foreach (Invoice invoice in Invoices)
{
DoStuff(invoice);
//I'd like to wait 8 seconds here before the next iteration
}
RefreshExecuted();
}
如何轻松完成?我试过的是:
private async void MassInvoiceExecuted()
{
foreach (Invoice invoice in Invoices)
{
DoStuff(invoice);
await Task.Delay(8000);
}
RefreshExecuted();
}
虽然它确实等了8秒而没有冻结用户界面,但它还在 RefreshExecuted()之前等待了大约30秒; 我显然不熟悉async await但它似乎是一个好主意
无论如何,我需要在每次迭代后等待8秒而不阻止UI,因为我必须能够通过按钮点击中止循环。我考虑过计时器。将间隔设置为8000并创建包含究竟是什么的tick方法?我不能把那些在MassInvoiceExecuted中的东西都放在tick方法中,因为这不对。
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
我理解你的答案也许你想要
private async void MassInvoiceExecuted()
{
foreach (Invoice invoice in Invoices)
{
DoStuff(invoice);
RefreshExecuted();
await Task.Delay(8000);
}
}
但实际上不知道您是否有任何理由仅在所有处理结束时更新UI。
答案 1 :(得分:0)
MassInvoiceExecuted方法一旦命中await关键字,就会将控制权返回给UI线程。因此,您的MassInvoiceExecuted方法仍然会运行并且每张发票等待8秒,我认为您有4张发票需要处理....