C# 以前的表单未及时清除以获取新表单
我有一个表单显示为C# 以前的表单未及时清除以获取新表单,c#,.net,winforms,C#,.net,Winforms,我有一个表单显示为ShowDialog()。关闭该表单后,我将显示一个带有进度条的新表单,但之前的表单在进度条表单出现之前没有完全删除。我该怎么处理 using(FormA formA= new FormA) { if(formA.ShowDialog()==DialogResult.OK) { } } FormB formB = new FormB; formB.Show(); ...{ formB.progressBar.PerformStep(); .
ShowDialog()
。关闭该表单后,我将显示一个带有进度条的新表单,但之前的表单在进度条表单出现之前没有完全删除。我该怎么处理
using(FormA formA= new FormA)
{
if(formA.ShowDialog()==DialogResult.OK)
{
}
}
FormB formB = new FormB;
formB.Show();
...{
formB.progressBar.PerformStep();
...}
formB.Close();
您可能正在阻止UI线程,请尝试以下操作:
using(FormA formA= new FormA)
{
if(formA.ShowDialog()==DialogResult.OK)
{
}
}
Application.DoEvents(); //make sure the ui refreshes
FormB formB = new FormB;
formB.Show();
...{
formB.progressBar.PerformStep();
...}
formB.Close();
在下面的代码中,带有
FormB
的代码将在FormA
的关闭事件中执行,确保在显示FormB
之前关闭FormA
using(FormA formA= new FormA)
{
formA.FormClosed += delegate(...) {
FormB formB = new FormB;
formB.Show();
...{
formB.progressBar.PerformStep();
...}
formB.Close();
};
if(formA.ShowDialog()==DialogResult.OK)
{
}
}
请添加一些代码,这样我们就可以看到,如果您的ProgressBar没有使用BackgroundWorker,那么可能是您的处理阻塞了UI,而您看到的“幽灵”是gui无法正确刷新表单。