调用Form.Close后表单未关闭
本文关键字:表单 Form Close 调用 | 更新日期: 2023-09-27 18:29:50
我们有一个应用程序在客户端运行,它显示出奇怪的行为。在一天中的任意时间,某些表单上的"确定"按钮(调用Form.Close方法)不会导致表单关闭。我的意思是,用户将单击按钮,在跟踪中它将显示Form.Close被调用,但表单不会关闭。
奇怪的是,表单本身仍然有响应,因此他们可以单击表单上的任何按钮,按钮后面的代码将执行,但表单不会关闭。
这种状态持续几秒钟到几分钟。然后,突然之间,表单将开始处理并消失。真奇怪。
因此,概括一下,发生了以下情况:
Form.ShowDialog()
->表格显示- 用户处理表单并按下按钮等等
- 调用
Form.Close()
->用户点击关闭按钮 - 一段时间过去了,表单只是在等待关闭,但仍然有响应(在这段时间里,沮丧的用户敲击了几次关闭按钮,但没有响应)
- 突然,表单被处理,并且从
Form.ShowDialog
返回对话框结果
需要注意的事项:
- 我没有使用任何类型的线程
- 据报道,在某些时候,电脑上的
explorer.exe
进程已停止,这会对表单的行为产生影响吗?我们正在安排重建电脑
我的问题是,是否有人知道可能导致上述行为的场景?
我不是Forms方面的专家,但据我所知,当你调用Form.Close
时,表单不会立即关闭,当前调用close的方法首先完成,然后另一个过程触发表单开始关闭和处理。
这是否与explorer.exe
进程未运行有关?
如有任何见解,我们将不胜感激。
***编辑
还要注意,我们不能复制这个问题,它在客户端随机发生。
让我想起C#为什么form.Close()不关闭表单?
在此之后,按钮单击事件处理程序中是否有任何代码。关闭()行?
我的意思是:
private void OKButton_Click(object sender, EventArgs e)
{
this.Close();
somecodehere <-- is there any code here? (after this.Close)
}
因为Form.Close不会立即关闭Form,所以如果调用后有代码,它仍然会执行,也许这就是阻止窗体关闭的原因。
您可以在关闭之前先hide
表单,这样用户就不会坐立不安并试图关闭它
Form.Hide();
Form.Close();
另一个原因是在关闭窗口或析构函数时,可能是您试图保存一个更大的文件或一些活动。如果是这样,请尝试在线程中执行此操作。这样它很快就会关闭窗体。
我同意@zdimension的回答,但我添加了一些额外信息:
- 首先,在另一个系统上运行应用程序,也许你在这个系统上发生了一些奇怪的事情
- 检查Close()调用后你在做什么,也许是什么东西减缓了关闭过程
- 检查是否在FormClosing事件处理程序或类似事件中执行任何操作
- 检查是否为关闭按钮的Click事件添加了其他回调
这些东西可能会帮助您发现是否出了问题,但我不认为问题是在Close()调用之后所做的事情,因为您说表单仍然有响应。