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