2

Task.Delayさて、 Application.DoEvents を使用するよりも使用する方が良いのではないかと思っていましたか?

サンプルコード:

private async void NonBlockingWaitAwhile(int milliseconds)
{
    Stopwatch sWatch = Stopwatch.StartNew();

    while (sWatch.Elapsed.Milliseconds <= milliseconds)
    {
        await Task.Delay(50);
    }
}

また

private void WaitAwhile(int milliseconds)
{
    Stopwatch sWatch = Stopwatch.StartNew();

    while (sWatch.Elapsed.Milliseconds <= milliseconds)
    {
        Application.DoEvents();
    }
}

したがって、どちらの方法が優れているか (特に、Application.DoEvents を使用すると、アプリケーションが実行する保留中のイベントがすべて解放されるため、エラーが発生する可能性があると聞いたことがあります)

4

2 に答える 2

5

Task.DelayDoEvents再入可能性を回避するためよりも優れています。

ただし、最善の解決策は、どちらも使用しないことです。遅延の有効な用途はごくわずかです。たとえば、再試行のスロットリングなどです。私が見た遅延の大部分は間違っています (たとえば、コーダーは競合状態を回避したり、厄介なアーキテクチャを回避したりするために遅延を使用していますが、正しいアプローチは実際の問題を修正することです)。

于 2013-07-02T22:01:30.013 に答える
2

Application.DoEvents は、実際には遅延を発生させません。メイン アプリケーションの UI スレッドが、キュー内の保留中の Windows メッセージをすべて処理するように強制します。処理するものがあまりない場合は、非常に迅速に戻ります。

于 2013-07-02T22:16:09.943 に答える