Сценарий завершения в C # - PullRequest
1 голос
/ 15 декабря 2009

Я хочу выполнить некоторый код (очистить ресурс) по завершении моего WinFormsApplication с помощью Windows TaskManager. Как мне это сделать? Я завершаю свое приложение, используя вкладку «Процесс» в TaskManager.

Ответы [ 5 ]

4 голосов
/ 15 декабря 2009

Подключите событие ApplicationExit из вашей основной формы и выполните очистку там.

Edit: Если вы закрываете приложение через диспетчер задач, нет события, которое вы можете перехватить. Эти события ожидают нормальных процессов завершения.

4 голосов
/ 15 декабря 2009

Если ваше приложение принудительно закрыто, я не уверен, что существует надежный способ очистки ресурсов. Я предполагаю, что ваши ресурсы нестандартные, которыми вы, а не Windows, управляете.

Есть две возможности. Во-первых, это установить приложение-службу Windows, которое следит за вашим приложением и обеспечивает очистку его ресурсов при уничтожении приложения. Это требует некоторого межпроцессного взаимодействия и большого количества кодирования.

Второе - обеспечить чистоту ресурсов при запуске приложения. Проверьте, не торчат ли ваши ресурсы при запуске, и очистите их перед продолжением выполнения.

2 голосов
/ 15 декабря 2009

Обработайте это событие в главном окне приложения:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
    if(e.CloseReason == CloseReason.TaskManagerClosing) {
        // clean up code
    }
}
1 голос
/ 15 декабря 2009

Я не уверен, и я не пробовал это. Но я предполагаю, что это должно быть возможно путем захвата некоторых событий Win32. Попробуйте WM_CLOSE, CTRL_CLOSE_EVENT

0 голосов
/ 15 декабря 2009

CriticalFinalizerObject может помочь вам в соответствии с его описанием:

... общеязыковая среда выполнения (CLR) гарантирует, что все критические код завершения будет дан возможность выполнить, при условии финализатор следует правилам для CER, даже в ситуациях, когда CLR принудительно выгружает домен приложения или прерывает поток

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...