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,在我的winform应用程序中,我有一个表单,用于显示“请稍候…”消息以及进度条或一些文本。出于性能原因,表单是一个单例,使用BringToFront()、Show()和Refresh()打开,并使用Hide()关闭 我正在使用try…finally模式来显示和隐藏此表单 try { WaitForm.Display(); // Some code } finally { WaitForm.Hide(); } 在一些罕见的情况下,用户报告表单没有关闭。你能想出表单无法关闭的原因吗?发生这种情况

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

我正在使用try…finally模式来显示和隐藏此表单

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

在一些罕见的情况下,用户报告表单没有关闭。你能想出表单无法关闭的原因吗?发生这种情况时,用户界面会做出响应

通常,在windows应用程序中,对于任何UI刷新,都需要运行其主消息循环。所以在您的情况下,如果在这个代码块之后发生了任何紧循环/处理,那么表单可能不会立即隐藏

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

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

你能复制这个错误吗?我不明白为什么它不被调用…这就是finally块中的所有代码吗?在
WaitForm.Hide()之前是否有一些代码行?@squelos:始终调用finally块中的代码。
WaitForm.Hide()
不被调用的唯一方法是在station之前有一些代码退出
finally
块(可能引发异常?),或者隐藏表单本身会导致异常。我无法复制它。每天从几百名活跃用户那里,我可能每月收到一份报告。这是finally块中唯一的代码。我可以安全地调用Hide()多次而不产生任何后果吗?我不确定是这样。例如,我看到表单没有关闭,用户在表单下方自由滚动datagridview。等待表单用于填充datagridview控件的SQL查询。@Nezreli可能调用了
WaitForm.Hide
它本身正在引发异常。您可以通过将try-catch放入finally块来捕获并记录异常来确认它。hide引发异常的原因之一可能是它在非UI线程(或与创建和显示表单的线程不同的线程)上调用了异常,但是在这种情况下,隐藏表单应该会遇到一致的问题。Application.DoEvents()方法解决了此问题。谢谢