У меня получилась следующая настройка:

WPF_Application.exe

А также

DLL, содержащая окно WinForms и окно WPF.

«WPF_Application.exe» вызывает окно WinForms из DLL, а окно WinForms создает экземпляр окна WPF в DLL.

Это создает следующее исключение:

Невозможно создать более одного экземпляра System.Windows.Application в одном домене приложения.

Пробовал разные вещи, но не мог понять, как это исправить.

8
JayTee 18 Фев 2015 в 17:55

3 ответа

Лучший ответ

Я исправил это, назначив Application окна wpf, которое вызывается окну Application.Current:

  if (Application.Current == null)
  {
       MyApplication = new Application
       {
          ShutdownMode = ShutdownMode.OnExplicitShutdown
       };
   }
   else
       MyApplication = Application.Current;
12
JayTee 19 Фев 2015 в 08:13

Убедитесь, что в XAML определено только одно приложение.

Visual Studio создает App.xaml при создании нового решения WPF. Если вы создали новый файл .xaml с тегом <Application></Application>, это вызовет эту ошибку, и решение будет построено, но не удастся во время выполнения.

Удалите повторяющееся приложение и используйте Window или UserControl для создания нескольких окон.

1
Aaron Thompson 20 Ноя 2018 в 12:20

System.Windows.Application - это синглтон: его конструктор должен быть вызван только один раз (включая де-xamlization App.xaml), иначе будет создано исключение.

Я боюсь, что вы мало что можете с этим поделать, кроме, возможно, проверки, установлен ли Application.Current перед запуском вашего второго приложения, и использовать этот экземпляр для его загрузки.

Или вы можете создать другой AppDomain и использовать его для запуска второго приложения.

2
Nicolas Repiquet 18 Фев 2015 в 15:12