Task.WaitAll()让一些WM_PAINT消息得到处理

时间:2014-02-13 14:04:57

标签: c# .net parallel-processing task-parallel-library

我想在使用Task.WaitAll()等待某些任务时完全阻止UI。如果最终用户与应用程序主窗体交互,则在等待时调用form1.OnPaint()。我们正在使用Winforms平台。

如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

您处理此问题的方法是手动禁用UI。

如果您使用winforms,最简单的方法是将Form.Enabled设置为false,然后在等待完成任务后再重新启用它。

如果您有权访问async / await,那么就像

一样简单
public async Task DisableFormsTillTasksComplete(Task[] tasks)
{
    this.Enabled = false;
    await task.WhenAll(tasks);
    this.Enabled = true;
}

如果你不能使用async / await,你可能需要在后台线程上运行Task.WaitAll,这样你就不会阻止绘制事件。