我想在使用Task.WaitAll()
等待某些任务时完全阻止UI。如果最终用户与应用程序主窗体交互,则在等待时调用form1.OnPaint()
。我们正在使用Winforms平台。
如何实现这一目标?
答案 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
,这样你就不会阻止绘制事件。