控件不显示重量过程

时间:2015-06-10 17:25:35

标签: c# winforms busy-waiting

我在winform中使用c#。

在一个非常繁重的功能之前,我想显示一个等待表单来阻止用户。表单将打开,但不会绘制其中的控件。

在下面的代码中,waitingForm是一个小形式,只有一个文本框和一个进度条

using (WaitingForm waitingForm = new WaintingForm())
{
  waitingForm.Show();
  HeavyFunction();
}

我只看到两个白色矩形,控件应该出现在那里。为什么会这样?

1 个答案:

答案 0 :(得分:2)

您无法在繁重的处理之前显示等待表单,并期望用户界面保持响应。您使用HeavyFunction()堵塞的线程与负责绘制表单,控件和维护UI的线程相同。使用BackgroundWorkerThreadPool将繁重的处理卸载到另一个线程。

编辑:另外,请考虑Ron Beyer关于async/await

的意见