Как убить процесс приложения Windows Mobile 6.1 формы, когда форма закрыта? - PullRequest
2 голосов
/ 22 сентября 2010

В файле 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 ]

4 голосов
/ 22 сентября 2010

Во-первых, вам не нужно переопределять OnFormClosed для получения нужного вам поведения. Простое закрытие формы, переданной в Application.Run, приведет к тому, что насос сообщений приложения выйдет, а должно завершить процесс. Для Windows Mobile вы должны установить свойство ShowMinimize формы на false, чтобы предотвратить его сворачивание - вы должны иметь (OK) в правом верхнем углу, а не (X).

Если процесс не завершается при закрытии этой формы, то виновником 99,99% времени является то, что у вас все еще работает рабочий поток, препятствующий закрытию процесса. Убедитесь, что для всех ваших потоков IsBackground установлено значение true (для CF 3.5), и в качестве меры предосторожности все ваши потоки также должны иметь некоторую форму уведомления о выходе или флаг. Не надейтесь, что процесс завершится, чтобы разрушить их для вас.

2 голосов
/ 22 сентября 2010

Ваша проблема в том, что у вас есть Form.MinimizeBox = true. Измените его на false и форма будет закрыта при нажатии ok вместо свернутого при нажатии x .

Есть еще несколько вопросов, которые следует учитывать в вашем вопросе:

Я переопределяю событие Form1 FormClosed

  • Для форм типа System.Windows.Forms.Form нет события FormClosed, только Closing и Closed.
  • Вы не отменяете событие. Вы переопределяете виртуальную функцию из базового класса или интерфейса.
...