WPF: невозможно вызвать событие Window.Closing из модуля приложения - PullRequest
0 голосов
/ 02 апреля 2020

Я отвечаю за разработку старого модульного приложения WPF с использованием Prism Library для WPF . В этом случае точка входа в приложение для меня является переопределенным методом Initialize (), поскольку у меня нет доступа к классу приложения Application.MainWindow . Этот класс вместе с некоторыми другими вспомогательными классами компилируется в EXE-файл и DLL.

В настоящее время я сталкиваюсь с проблемой, что мне нужно перехватить событие Window.Closing , которое не поднял при закрытии приложения. Обычно этот фрагмент кода, который помещается в конструктор (в данном конкретном случае c в метод Initialize ()), работает ожидаемым образом

Application.Current.MainWindow.Closing += (s, e) =>
{
  e.Cancel = true;
};

С другой стороны, событие Window.Closed запускается без каких-либо проблем.

По моему мнению, невозможно связать этот обработчик событий вне конструктора Application.MainWindow , или я что-то не так? Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 02 апреля 2020

Проблема была найдена. Метод OnClosing , который вызывает событие Закрытие , реализован в оболочке и выглядит так:

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
     e.Cancel = true;
     ViewModel.StartShutdownSequence();
}

StartShutdownSequence() инкапсулирует некоторые логики c относительно обрабатывает отдельные модули и в конце вызывает Application.Current.Shutdown(), что определенно завершает работу приложения.

...