形式有时不会隐藏,尽管最终阻止

时间:2012-03-20 09:07:01

标签: c# .net winforms

在我的winform应用程序中,我有一个表单,用于显示“请稍候...”消息以及进度条或一些文本。出于性能原因,Form是一个单例,它使用BringToFront(),Show()和Refresh()打开,并使用Hide()关闭。

我正在使用try ... finally模式显示此表单并隐藏它。

try
{
WaitForm.Display();
// Some code
}
finally
{
WaitForm.Hide();
}

在极少数情况下,用户报告该表单未关闭。你能想出为什么表格不会关闭的原因吗?发生这种情况时,用户界面会响应。

1 个答案:

答案 0 :(得分:1)

通常,在Windows应用程序中,对于任何UI刷新,都需要运行其主消息循环。因此,在您的情况下,如果在此代码块之后发生任何严格的循环/处理,则表单可能不会立即隐藏。

也许,您可以在代码块之后生成UI线程,以便UI可以刷新。例如,

try
{
  WaitForm.Display();
  // Some code
}
finally
{
  WaitForm.Hide();
  Application.DoEvents();
}