Перехват приложения закрывается в C#
Я хотел бы правильно закрыть некоторые сокеты и иметь возможность сообщить серверу, что мы закрываем, но если приложение закрыто, то все сокеты просто закрываются, а иногда файлы остаются заблокированными. Как я могу запустить метод, когда мое приложение закрыто?
Это будет входить в библиотеку, которая будет использоваться в приложении форм.
4 ответа
Я бы реализовал IDisposable на классах, которые используют эти ресурсы. Затем Dispose может быть вызван явно из любого метода завершения, поддерживаемого типом приложения (OnFormClose, OnStop, Application_End, ...).
Если это приложение Windows Forms, вы можете выделить форму, щелкнуть молнию события в окне свойств и использовать событие закрытия формы.
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(OnFormClosing);
private void OnFormClosing(object sender, FormClosingEventArgs e)
{
// Your socket logic here
}
Также, если вам нужно перехватить закрываемую форму, установите для свойства Cancel значение true:
e.Cancel = true;
Вы говорите о приложении WinForms? Если это так, используйте событие FormClosing в главной форме.
Я не уверен, что это лучшее место для этого, но вы можете сказать, что ваш процесс закрывается, перехватывая AppDomain.ProcessExit. Это хорошо для очистки, но я не думаю, что это хорошее время для отправки каких-либо сообщений.:)