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();
}

また、UI をフリーズせずに 8 秒間待機しましたが、RefreshExecuted();の直前にも約 30 秒間待機しました。私は明らかに async await に慣れていませんが、それは良い考えのように思えました。

とにかく、ボタンをクリックしてループを中止できるようにする必要があるため、UI をブロックせずに各反復後に 8 秒待つ必要があります。タイマーを検討しました。間隔を 8000 に設定し、正確に何を含む tick メソッドを作成しますか? 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 に答える