C# Form.onFormClosing事件处理程序在与Form.Close相同的线程中调用

C# Form.onFormClosing事件处理程序在与Form.Close相同的线程中调用,c#,.net,event-handling,C#,.net,Event Handling,这是一个我想纠正的概念,而不是一个问题,所以请原谅我在处理这一问题时的含糊不清: 我正在开发一个仅限Windows托盘的应用程序,其中我提供了一个退出应用程序的菜单选项。因为我没有关闭应用程序的关闭按钮,所以当调用Exit from the tray menu时,我会处理该事件并显式调用Form.close()。我重写的Form.onFormClosing()似乎是在调用Form.Close()和Form.onFormClosing()的同一线程上调用的,而Form.onFormClosing(

这是一个我想纠正的概念,而不是一个问题,所以请原谅我在处理这一问题时的含糊不清:


我正在开发一个仅限Windows托盘的应用程序,其中我提供了一个退出应用程序的菜单选项。因为我没有关闭应用程序的关闭按钮,所以当调用Exit from the tray menu时,我会处理该事件并显式调用Form.close()。我重写的Form.onFormClosing()似乎是在调用Form.Close()和Form.onFormClosing()的同一线程上调用的,而Form.onFormClosing()似乎是来自Form.Close()的同步调用。我这样想对吗?如果我是,该如何映射到在应用程序上单击关闭按钮的时间?

这是正确的。表单的Livecycle在关闭时如下所示:

  • System.Windows.Forms.Form.Closing
  • System.Windows.Forms.Form.Form关闭
  • System.Windows.Forms.Form.Closed
  • System.Windows.Forms.Form.Form关闭
  • System.Windows.Forms.Form.Deactivate


一旦您想要关闭表单,这些操作就会被一个接一个地调用。这就是为什么他们也在同一条线上。无论如何,GUI操作都应该在主线程(GUI线程)上运行。

Winforms通常是单线程的,但您可以编写自己的trheads来为您执行一些工作。因此,当单击应用程序上的关闭按钮时,我认为默认处理程序调用Form.Close()是正确的吗然后会导致一系列调用同步调用Form.onClosing、Form.onFormClosing等等?