Как убить процесс приложения Windows Mobile 6.1 формы, когда форма закрыта?
В файле Program.cs написанной мной программы.Net CF 3.5 WinForms я запускаю приложение, создавая новый экземпляр Form1.
Application.Run(new Form1());
Когда я хочу закрыть / закрыть приложение, я перезаписываю событие Form1 FormClosed, чтобы обеспечить выход из приложения.
// In Form1 code-behind
private void OnFormClosed(object sender, EventArgs e)
{
Application.Exit(); // Doesn't kill process
}
Когда этот код запускается, я хочу, чтобы приложение исчезло с экрана (закрыть), и я хочу, чтобы процесс, в котором оно работало, умер. Приложение закрывается (исчезает), но, к сожалению, процесс (назовем его app.exe) все еще работает бесконечно. Когда я снова запускаю приложение и закрываю его, оно запускает еще один процесс app.exe и т. Д. Таким образом, этот процесс никогда не умирает, и создается больше памяти.
Как я могу гарантировать, что этот процесс будет остановлен при закрытии / выходе из приложения? Благодарю.
2 ответа
Во-первых, вам не нужно переопределять OnFormClosed для получения нужного вам поведения. Просто закрыв форму, переданную в Application.Run, вы выйдете из насоса сообщений приложения и завершите процесс. Для Windows Mobile вы должны установить свойство ShowMinimize формы в false
чтобы предотвратить его сведение к минимуму - вы должны иметь (ОК) в правом верхнем углу, а не (X).
Если процесс не завершается при закрытии этой формы, то виновником 99,99% времени является то, что у вас все еще работает рабочий поток, препятствующий закрытию процесса. Убедитесь, что все ваши темы имеют IsBackground
установлен в true
(для CF 3.5) и в качестве меры предосторожности, все ваши темы также должны иметь некоторую форму уведомления о выходе или флаг. Не надейтесь, что процесс завершится, чтобы разорвать их за вас.
Ваша проблема в том, что у вас есть Form.MinimizeBox = true
, Измените это на false
и форма будет закрыта при нажатии кнопки ОК, а не свернута при нажатии кнопки x.
Есть еще несколько вещей, которые следует учитывать в вашем вопросе:
Я перезаписываю событие Form1 FormClosed
- Здесь нет
FormClosed
событие для форм типаSystem.Windows.Forms.Form
, толькоClosing
а такжеClosed
, - Вы не отменяете событие. Вы переопределяете виртуальную функцию из базового класса или интерфейса.