C# Application.Exit调用FormClose事件

C# Application.Exit调用FormClose事件,c#,winforms,formclosing,C#,Winforms,Formclosing,我在.NET4.5 Winforms C中工作 我的应用程序基于模型-视图-控制器模式。在主窗体视图上,我有一个按钮退出。如果用户按下此按钮,将在控制器上调用一个方法,该方法将清理内容,然后调用Application.Exit。这个很好用 我还希望在用户按下右上角窗口中的默认窗口出口十字时运行此方法。为此,我处理FormClosing事件。在本例中,我再次调用调用Application.Exit的控制器方法 现在的问题是Application.Exit还触发FormClosing事件。这会造成双

我在.NET4.5 Winforms C中工作

我的应用程序基于模型-视图-控制器模式。在主窗体视图上,我有一个按钮退出。如果用户按下此按钮,将在控制器上调用一个方法,该方法将清理内容,然后调用Application.Exit。这个很好用

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

现在的问题是Application.Exit还触发FormClosing事件。这会造成双重呼叫。当然,我可以做一个标志和测试,但我觉得我做错了什么


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

正确的方法是将清理代码包含在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
}

但这意味着清理代码驻留在我的视图中?当然,这很好,但是应该清理代码数据库访问、文件关闭等。。不发生在控制器或模型中?我正在尝试使视图尽可能哑,以便用任何其他GUI替换它并进行更好的测试。我只想向我的控制器发送一个事件,然后从那里处理应用程序关闭…这就是清理过程中要做的。是否让“退出”按钮关闭表单?