Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以前的表单未及时清除以获取新表单_C#_.net_Winforms - Fatal编程技术网

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无法正确刷新表单。