【发布时间】:2020-02-14 08:24:54
【问题描述】:
我有一个非托管应用程序,该应用程序将 WPF 程序集用于其某些用户界面。由于这种安排,Application.Current 不会自动创建。所以当第一个 WPF 窗口被加载时,我的代码会这样做:
if (System.Windows.Application.Current == null)
{
new System.Windows.Application();
}
这是第一次工作,是I've seen recommended的方法。
但是如果用户关闭(唯一的)WPF 窗口,然后再次加载它,即使Current == null 再次在调用 Application ctor 时引发异常。
documentation 中很清楚,每个 AppDomain 只能有一个应用程序 - 但是为什么 Current 为 null 而我却无法创建它?
抛出的异常类型为InvalidOperationException,并有以下消息:
不能在 相同的 AppDomain。
它的InnerException 为空。
为了解决这个问题,我尝试了:
使用
ShutdownMode = ShutdownMode.OnLastWindowClose构造Application当 WPF 窗口关闭时显式调用
Current.Shutdown()
但两者都没有任何区别。
还有其他方法可以手动管理Current 对象的生命周期吗?或者我应该尝试在非托管应用程序启动时创建它,然后依赖它在进程的生命周期内始终设置?
【问题讨论】:
-
什么是异常,以及任何 InnerException?
-
@rfmodulator 好点,我会检查并添加...
-
@rfmodulator 添加
-
你能创建一个小的工作示例吗?可能有一些变量,例如位数/单元线程等......可能需要考虑。
-
@ΩmegaMan 可能是的,我会看看我能不能把它拆掉。它是一个 32 位非托管调用应用程序,并且没有手动创建线程。