Приложение WPF не закрывается правильно - PullRequest
7 голосов
/ 01 мая 2009

Я звоню Application.Current.Shutdown() из класса, который связан с окнами xaml с ObjectDataProvider, но приложение не закрывается. Может ли кто-нибудь помочь мне понять, почему? После закрытия главного окна мое приложение не закрывается полностью, оно не исчезает из списка процессов диспетчера задач.

Ответы [ 6 ]

25 голосов
/ 14 мая 2009

Попробуйте Environment.Exit(0) вместо

9 голосов
/ 01 мая 2009

Вы создали какие-либо темы для фоновой обработки? Если у вас есть, убедитесь, что для них установлено свойство .IsBackground, или они могут поддерживать приложение в рабочем состоянии

5 голосов
/ 22 мая 2009

Не забудьте добавить это:

private void Window_Closed(object sender, EventArgs e)
{
  Application.Current.Shutdown();
}

Надеюсь, это поможет.

1 голос
/ 01 мая 2009

Если в вашем приложении несколько окон или диалогов, вам может потребоваться закрыть каждое из них явно.

Закрыть диалоги с:

_myDialog.Close ();

Закрыть все окна:

foreach(var window in Application.Current.Windows.ToList())
{
    window.Close();
}
0 голосов
/ 01 апреля 2014

У меня была проблема, когда приложение не закрывалось, даже когда главное окно было закрыто. Оказалось, что я сделал Hide () на заставке вместо Close (), поэтому он все еще скрывался в фоновом режиме, поддерживая приложение в живых.

0 голосов
/ 24 ноября 2011

У меня была такая же проблема, процесс приложения не останавливается, хотя приложение закрыто.

В моем случае я открыл окно из BackgroundWorker (код ниже)

BackgroundWorker BG = new BackgroundWorker();
BG.DoWork += new DoWorkEventHandler(BG_DoWork);
StockMinWindow MinWindow = new StockMinWindow(null); -------- this is the problem 
BG.RunWorkerAsync();

создание экземпляра окна перед запуском BackgroundWorker, похоже, не является проблемой, но стирая строку, которую приложение закрыло корректно

Я открываю свое окно из BackgroundWorker, но использую основной поток (код ниже)

 View.Dispatcher.BeginInvoke(new Action(delegate()
 {
   StockMinWindow MinWindow = new StockMinWindow(StockMinList);
   MinWindow.Owner = View;
   MinWindow.ShowDialog();
 }));

Надеюсь, это поможет.

...