У меня консольное приложение, запущенное как [STAThread]
.
Это приложение должно открыть отдельный интерфейс Wpf для ввода некоторых настроек.
Функции для этого:
private static void openUI()
{
var application = new System.Windows.Application();
//referenced project in the same solution
var ui = new ManagerUI.MainWindow();
//blocks execution
application.Run(ui);
application.Shutdown();
}
Открытие пользовательского интерфейса в первый раз работает, как и ожидалось.Проблема возникает при повторном открытии пользовательского интерфейса.
Я получаю System.InvalidOperationException
, говоря, что не могу запустить более одного экземпляра приложения в одном и том же домене приложений.
Для сохранения оперативной памяти, он должен быть закрыт между операциями.
Я также попытался создать System.Windows.Application
в конструкторе.Но как только я запускаю приложение во второй раз, я получаю очень похожее исключение.Метод InitializeComponents()
интерфейса выдает System.InvalidOperationException
, говоря, что объект будет завершен.
StackTraces показывает, что ошибка возникает при разборе xaml, поэтому я пришел к выводу, что он не может открыть его, так как он все еще открывается при первом выполнении.
Ни вызов ui.Close()
, ни вызовapplication.Shutdown()
решает проблему (Environment.Exit()
закрывает все, включая мое консольное приложение).
Профилировщик оперативной памяти указывает, что не все было закрыто правильно, поскольку он показывает более высокое использование после закрытия окна, чем до негобыл открыт в первом месте.
Как правильно закрыть экземпляр приложения или как повторно использовать его для запуска приложения Wpf несколько раз?