【发布时间】:2021-01-19 14:46:10
【问题描述】:
我有一个以[STAThread] 开头的控制台应用程序。
该应用程序应打开一个单独的 Wpf UI 以输入某些设置。
功能:
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();
}
第一次打开 UI 按预期工作。 第二次打开UI时出现问题。
我收到System.InvalidOperationException,说我不能在同一个 AppDomain 中运行多个应用程序实例。
为了节省内存,必须在操作之间关闭它。
我还尝试在构造函数中创建System.Windows.Application。
但是当我第二次运行该应用程序时,我得到了一个非常相似的异常。
UI 的InitializeComponents() 方法抛出System.InvalidOperationException,表示对象将被终止。
StackTraces显示解析xaml时出现错误,所以我断定它无法打开它,因为它仍然是第一次执行时打开的。
调用ui.Close() 和application.Shutdown() 都不能解决问题(Environment.Exit() 会关闭所有内容,包括我的控制台应用程序)。
ram profiler 表明,并非所有东西都正确关闭,因为它显示在窗口关闭后的使用率高于在第一个位置打开之前。
如何正确关闭应用程序实例,或者如何重复使用它来多次运行 Wpf 应用程序?
【问题讨论】: