我有一个控制台应用程序作为[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时出现问题。
我得到一个System.InvalidOperationException
,说我不能在同一个 AppDomain 中运行多个应用程序实例。
为了节省 ram,它必须在操作之间关闭。
我还尝试System.Windows.Application
在构造函数中创建。但是一旦我第二次运行该应用程序,就会遇到一个非常相似的异常。InitializeComponents()
UI的方法抛出一个System.InvalidOperationException
,表示对象将被终止。
StackTraces 显示解析xaml 时出现错误,所以我断定它无法打开它,因为它仍然在第一次执行时打开。
调用ui.Close()
和调用都application.Shutdown()
不能解决问题(Environment.Exit()
关闭所有内容,包括我的控制台应用程序)。
ram 分析器表明,并非所有东西都正确关闭,因为它在关闭窗口后显示出比在最开始打开之前更高的使用率。
如何正确关闭应用程序实例,或者如何重新使用它来多次运行 Wpf 应用程序?
看看这个问题:Does a WPF Application 实际上需要 Application.Run?.
基本上它说,您可以使用 window.ShowDialog() 方法打开窗口而无需 Application 实例
认为 Application.Run 不做任何重要的事情,而是运行 Dispatcher 循环。ShowDialog 有自己的 Dispatcher。但是,您可以创建 Application 单例实例,因为它包含一些共享资源。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句