Вопрос System.ExecutionEngineException при загрузке окна WPF из Windows Form - PullRequest
5 голосов
/ 02 декабря 2008

Я обнаружил довольно странное поведение ...

Вот как воспроизвести проблему:

  1. Создание проекта приложения WPF.
  2. Удалите StartupUri из файла App.xaml.
  3. Добавление обработчика событий запуска в приложение с подписью "private void Application_Startup(object sender, StartupEventArgs e)"
  4. Теперь добавьте форму в проект (щелкните правой кнопкой мыши и выберите Добавить новый элемент).
  5. в методе Application_Startup создайте объект формы и покажите его как Form1 f1 = new Form1(); f1.ShowDialog();
  6. На фактической форме Form1 добавьте кнопку в конструктор и добавьте обработчик события нажатия кнопки.
  7. Добавьте новое окно WPF в свой проект, Window1.
  8. В обработчике события щелчка кнопки Form1, созданном на шаге 6, добавьте строки кода для создания отображения окна WPF: Window1 w1 = new Window1(); w1.Show();
  9. Запустите проект и нажмите кнопку на winform, чтобы показать окно WPF ... пока работает отлично.
    1. Закройте окно WPF и снова нажмите кнопку winform. На этот раз вы должны получить исключение.

Итак, по сути, я создаю приложение WPF, которое отображает winform. Затем winform отображает окно WPF.

При первом отображении окна WPF все работает нормально. Если он закрыт, а затем снова открыт, я получаю исключение! Я также могу открыть несколько окон WPF, нажав кнопку несколько раз. Однако после закрытия последнего я никогда не смогу открыть еще один без исключения ...

Я также попробовал различные советы, предложенные на http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/442782b1-00a1-4e2e-9cc6-ae99b6699126/, но они не помогают.

Почему это происходит?

1 Ответ

10 голосов
/ 06 февраля 2009

По умолчанию режим отключения Wpf-приложений (указанный на вкладке «Приложение» в свойствах проекта в VS или с помощью атрибута ShutdownMode в Application.Xaml) - «При закрытии последнего окна». Это означает, что когда вы закрываете окно Wpf, которое вы создаете, Wpf закрывает среду приложения, поэтому любые последующие создания окна будут вызывать исключение.

Вы можете избежать этой проблемы, установив режим выключения на «При явном выключении» («OnExplicitShutdown» в Xaml). Затем вам нужно будет явно вызвать Application.Current.Shutdown вручную, когда вы хотите, чтобы приложение завершилось (например, когда форма winforms закрыта).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...