Перехват приложения закрывается в c #
-
03-07-2019 - |
Вопрос
Я хотел бы правильно закрыть некоторые сокеты и иметь возможность сообщить серверу, что мы закрываем, но если приложение закрыто, то все сокеты просто закрываются, а иногда файлы остаются заблокированными. Как я могу запустить метод, когда мое приложение закрыто?
Это будет входить в библиотеку, которая будет использоваться в приложении форм.
Решение
Я хотел бы реализовать 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 . Это хорошо для очистки, но я не думаю, что это хорошее время для отправки каких-либо сообщений. :) Р>