Убедитесь, что вы не создаете объекты Window, которые вы никогда не показываете ()
По какой-то безумной причине WPF добавляет окна к Application.Windows
при CREATION, а не при первом вызове Show()
. Если для Application.Current.Shutdown
установлено значение ShutdownMode.OnLastWindowClose
, то эти окна (которые вы даже не отображали) будут препятствовать закрытию приложения.
Допустим, вы открываете дочернее окно вашего главного окна, как это
Console.WriteLine("Window count : " + Application.Windows.Count);
var window = new OrderDetailsWindow();
Console.WriteLine("Window count : " + Application.Windows.Count);
window.Show();
Еще до того, как вы позвоните по номеру Show()
, вы увидите, что Applications.Windows теперь показывает 2. Приложение отключится только тогда, когда Windows.Count будет равно нулю.
Моя ситуация:
У меня есть WindowFactory, которая берет модель представления и создает окно для переданной модели.
Каким-то образом за эти годы моя копия и склейка дали следующее:
if (viewModel is DogModel)
{
window = new DogWindow();
}
else if (viewModel is CatViewModel)
{
window = new CatWindow();
}
if (viewModel is DogModel)
{
window = new DogWindow();
}
window.DataContext = viewModel;
window.Show();
Поэтому, когда viewModel
равнялся DogModel
, я заканчивал тем, что создавал ДВУХ DogWindow
объектов, поэтому Application.Windows.Count
равнялся 3, когда я ожидал, что будет 2. Поскольку Application.Shutdown
ждал закрытия всех окон, он никогда не получал активировано - хотя я никогда даже не открывал окно!
Я бы всегда предполагал, что Show()
был необходим для активации окна, но это было неверное предположение - поэтому мое приложение никогда не закрывалось.