Перехват приложения закрывается в 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. Это хорошо для очистки, но я не думаю, что это хорошее время для отправки каких-либо сообщений.:)

Другие вопросы по тегам