我在winform中使用c#。
在一个非常繁重的功能之前,我想显示一个等待表单来阻止用户。表单将打开,但不会绘制其中的控件。
在下面的代码中,waitingForm是一个小形式,只有一个文本框和一个进度条
using (WaitingForm waitingForm = new WaintingForm())
{
waitingForm.Show();
HeavyFunction();
}
我只看到两个白色矩形,控件应该出现在那里。为什么会这样?
答案 0 :(得分:2)
您无法在繁重的处理之前显示等待表单,并期望用户界面保持响应。您使用HeavyFunction()
堵塞的线程与负责绘制表单,控件和维护UI的线程相同。使用BackgroundWorker或ThreadPool将繁重的处理卸载到另一个线程。
编辑:另外,请考虑Ron Beyer关于async/await
的意见