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.Delay比它更好,DoEvents因为它避免了重入。

但是,最好的解决方案是不使用它们。延迟只有少数有效用途,例如限制重试。在绝大多数情况下,我看到延迟是错误的(例如,当正确的方法是解决实际问题时,编码人员使用它来避免竞争条件或解决尴尬的架构)。

于 2013-07-02T22:01:30.013 回答
2

Application.DoEvents 并没有真正造成延迟——它强制主应用程序 UI 线程处理队列中所有待处理的 Windows 消息。如果没有太多要处理的,它会很快返回。

于 2013-07-02T22:16:09.943 回答