0

我正在做一个项目,我需要一些帮助。这是一个代码片段:

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 秒而没有冻结 UI,但它也在RefreshExecuted()之前等待了大约 30 秒;我显然不熟悉异步等待,但这似乎是个好主意。

无论如何,我需要在每次迭代后等待 8 秒而不阻塞 UI,因为我必须能够通过单击按钮来中止循环。我考虑过计时器。将间隔设置为 8000 并创建一个包含什么的刻度方法?我不能将 MassInvoiceExecuted 中的所有内容都放在 tick 方法中,因为那是不对的。

任何帮助将非常感激。谢谢!

4

2 回答 2

1

对于我对您的回答的理解,也许您想要

private async void MassInvoiceExecuted()
{     
    foreach (Invoice invoice in Invoices)
    {
        DoStuff(invoice);
        RefreshExecuted();
        await Task.Delay(8000);
    }
}

但真的不知道您是否有任何理由仅在所有处理结束时更新 UI。

于 2013-09-14T17:41:29.793 回答
0

MassInvoiceExecuted 方法会在遇到 await 关键字后立即将控制权返回给 UI 线程。因此,您的 MassInvoiceExecuted 方法仍然运行并等待每张发票 8 秒,我假设您有 4 张发票要处理....

于 2013-09-14T17:30:45.200 回答