调用Form.Close

时间:2016-01-11 08:34:31

标签: c# forms

我们在客户端运行的应用程序显示奇怪的行为。在白天的随机时间,某些表单上的“确定”按钮(调用Form.Close方法)不会导致表单关闭。我的意思是用户将单击按钮,在跟踪中它将显示已调用Form.Close但表单将不会关闭。

奇怪的是,表单本身仍然是响应式的,因此他们可以单击表单上的任何按钮,按钮后面的代码将执行,但表单不会关闭。

此状态持续几秒到几分钟。然后,表格突然开始处理并消失。真奇怪。

回顾一下,发生以下情况:

  • Form.ShowDialog() - >表格显示
  • 用户在表单上工作并按下按钮等
  • Form.Close()被称为 - >用户点击了关闭按钮
  • 表单只是在等待关闭的同时仍在响应的时间段(此时沮丧的用户敲了几次关闭按钮而没有响应)
  • 突然处理表单并从Form.ShowDialog
  • 返回对话框结果

注意事项:

  • 我没有使用任何类型的线程。
  • 在某些时候,据报道explorer.exe进程已停止在PC上,这会对表单的行为产生影响吗?我们正在安排重建PC。

我的问题是,是否有人知道可能导致上述行为的情况?

我不是Forms的专家,但据我所知,当你调用Form.Close时,表单不会立即关闭,当前调用Close的方法首先完成,然后另一个进程触发表单开始关闭和处置。

这可能与explorer.exe进程未运行有关吗?

非常感谢任何见解。

***编辑

另请注意,我们无法复制该问题,它会在客户端随机发生。

3 个答案:

答案 0 :(得分:1)

让我想起C# Why does form.Close() not close the form?

在this.Close()行之后的按钮单击事件处理程序中是否有任何代码?

我的意思是:

private void OKButton_Click(object sender, EventArgs e)
{
    this.Close();

    somecodehere <-- is there any code here? (after this.Close)
}

因为Form.Close没有立即关闭Form,所以如果你在调用后有代码,它仍然会执行,也许这就是阻止表单关闭的原因。

答案 1 :(得分:0)

您可以在关闭之前先hide表单,以便用户不会烦恼并尝试关闭它

Form.Hide();
Form.Close();

另一个原因是关闭窗口或析构函数可能是您试图保存更大的文件或某些活动。如果是这样,试着在线程中这样做。这样它很快就会关闭表格。

答案 2 :(得分:0)

我同意@zdimension的答案,但我添加了一些额外的信息:

  • 首先,在另一个系统上运行应用程序,也许你在这个系统上发生了一些奇怪的事情
  • 检查在Close()调用之后您正在做什么,可能会减慢结束过程
  • 检查您是否在FormClosing事件处理程序或类似事件中执行任何操作
  • 检查是否为关闭按钮的Click事件添加了一些其他回调

这些东西可能会帮助您找出问题是否存在,但我不认为问题是您在Close()调用之后所做的事情,因为您说该表单仍然是响应式的。