0

我正在使用 .NET4.5 Winforms C#。

我的应用程序基于模型视图控制器模式。在主窗体(视图)上,我有一个退出按钮。如果用户按下此按钮,则在控制器上调用一个方法来清理内容,然后调用 Application.Exit()。这工作正常。

我还想在用户按下右上角窗口中的默认窗口退出十字时运行此方法。为此,我处理 FormClosing 事件。在此事件中,我再次调用调用 Application.Exit(); 的控制器方法;

现在的问题是 Application.Exit() 也会触发 FormClosing 事件。这会产生双重呼叫。当然,我可以为此制作一个标志并进行测试,但我觉得我做错了什么。

关闭我的 winforms 应用程序并清理所需内容的正确方法是什么。我不想在视图的关闭事件中进行清理,看起来很难看。

4

1 回答 1

7

这样做的正确方法是将清理代码包含在FormClosing事件处理程序中调用的方法中(在我看来,这并不难看)。Application.Exit以老式方式调用或关闭应用程序会导致生成此事件。这会触发清理方法。

private void Clicked(object sender, EventArgs e)
{
  Application.Exit();
}

private void FormClosing(object sender, CancelEventArgs e)
{
  Cleanup();
}

private void Cleanup()
{
  // do cleanup here
}
于 2013-09-26T10:11:22.750 回答