Как убить процесс приложения 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,
  • Вы не отменяете событие. Вы переопределяете виртуальную функцию из базового класса или интерфейса.
Другие вопросы по тегам