1

我在winform中使用c#。

在一个很重的函数之前,我想显示一个等待表单来阻止用户。窗体打开,但其中的控件未绘制。

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

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

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

4

1 回答 1

2

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

编辑:另外,请考虑 Ron Beyer 关于异步/等待的输入

于 2015-06-10T17:29:45.387 回答