C# 在c中拦截应用程序关闭#

C# 在c中拦截应用程序关闭#,c#,resource-cleanup,C#,Resource Cleanup,我希望正确地关闭一些套接字,并且能够告诉服务器我们正在关闭,但是如果应用程序关闭,那么所有套接字都将关闭,有时文件会被锁定。当应用程序关闭时,如何运行方法 这将进入一个将在表单应用程序中使用的库。你说的是WinForms应用程序吗?如果是这样,请在主窗体上使用。我不确定它是否是放置它的最佳位置,但您可以通过挂接来确定您的进程正在关闭。清理工作还行,但我认为现在不是发送任何信息的好时机。:) 如果是Windows窗体应用程序,您可以将焦点放在窗体上,请单击属性窗口中的事件闪电,然后使用窗体关闭事件

我希望正确地关闭一些套接字,并且能够告诉服务器我们正在关闭,但是如果应用程序关闭,那么所有套接字都将关闭,有时文件会被锁定。当应用程序关闭时,如何运行方法


这将进入一个将在表单应用程序中使用的库。

你说的是WinForms应用程序吗?如果是这样,请在主窗体上使用。

我不确定它是否是放置它的最佳位置,但您可以通过挂接来确定您的进程正在关闭。清理工作还行,但我认为现在不是发送任何信息的好时机。:)

如果是Windows窗体应用程序,您可以将焦点放在窗体上,请单击属性窗口中的事件闪电,然后使用窗体关闭事件

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(OnFormClosing);

private void OnFormClosing(object sender, FormClosingEventArgs e)
{
    // Your socket logic here
}
此外,如果需要截取正在关闭的表单,请将Cancel属性设置为true:

e.Cancel = true;

我将在使用这些资源的类上实现。然后可以从应用程序类型支持的任何关闭方法(OnFormClose、OnStop、application_End等)显式调用Dispose

欺骗?或者非常接近:垃圾收集器不会做这样的事情。终结器将调用类的终结器方法,该方法可能会调用Dispose。谢谢Samuel,我已经进行了相应的编辑。尽管该链接确实显示了调用Dispose的析构函数,但这也不会释放托管资源(因为它是Dispose(false))。但是,如果你正在创建一个公共方法来释放一个类的资源,那么我认为应该考虑实现IDISPOLISTABLE。那么你如何发送消息呢?你需要帮助吗