2012-02-22 2 views
1

Представьте, что вы запускаете процесс или запускаете приложение, однако в диспетчере задач это убивает этот процесс. Связано ли событие?Событие процесса обработки

Этот код, отменить пользователь закрыть окно приложения

private void Form1_Aplicacao_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.CloseReason == CloseReason.UserClosing) 
     e.Cancel = false; 
} 

Но если я с помощью метода process.kill(), FormClosing событие не был уволен. Мой вопрос: Есть ли событие, чтобы убить этот собственный процесс?

+0

Возможный дубликат HTTP: // stackoverflow.com/questions/3326242/c-sharp-windows-form-killed-by-task-manager-is-there-a-way-to-run-shutdown-fun – arunes

+0

Я не верю, что вы найдете событие когда приложение прерывается таким образом. –

ответ

1

Короткий ответ: нет, ваше приложение не может знать (например, с поднятым событием), что его хостинг-процесс был жестоко убит.

3

Событие не возбуждается, когда процесс убит. Скорее всего, при уничтожении процесс просто удаляется из списка запущенных задач планировщика, его память освобождается, а затем ОС берет любые оставшиеся части после этого. Я определенно не буду рассчитывать на работу даже деструкторов или сборщиков мусора, поэтому любые ресурсы, которые используются, которые ОС не может очистить, будут просочиться.

(На самом деле) убийство процесса означает, что вы его убиваете, разрезаете, размалываете и бросаете куски в океан. Более технически, никакого перехода в код убитого процесса выдается, поэтому внутри этого кода не может быть никакого события. Помните, что события, как и многие другие конструкции управления потоком (петли, условные обозначения и т. Д.), А также многозадачность, - это просто причудливые gotos. Очень полезно фантазии gotos, правда, но все же просто прыгает в разные части доступного кода.

0

Это не выход из права. Вы можете использовать технологические коммуникационные технологии, такие как PIPES.

Вы можете отправить бросок PIPES и ждать ответа. Вы можете создать правило, которое, если ответ не был получен в X раз, процесс был убит.

Но это только один из вариантов процесса связи, для получения дополнительной информации вы можете проверить в следующей ссылке: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx

Также смотрите на следующей опции: C# process.start, how do I know if the process ended?

Смежные вопросы