情景:
除了Application.Current在我需要它时似乎为null之外,一切似乎都在工作。我真正想做的就是在第一个表单完全显示之前挂钩到未处理的异常事件。
答案 0 :(得分:12)
答案 1 :(得分:3)
在WPF中,Application
对象不直接负责消息泵,它是Dispatcher
。当您启动WPF应用时,会在启动时调用Application.Run()
,并调用Dispatcher.Run()
。
在互操作方案中,Application.Current
将返回null
,因为它是从不创建的。消息泵送由VB处理,因为它创建了主窗口。如果您在代码中依赖它,您可以:
创建一个新的Application
对象:
if (Application.Current != null)
{
new Application();
}
应用程序是一个单例,因此它将自动存储在Application.Current
中。
尽可能避免依赖它(我认为这是推荐的方式)。您应该注意,此类提供的许多服务(例如,Exit事件)无论如何都无法在您的场景中使用。如果您只需要未处理的异常事件,则可以使用Dispatcher.CurrentDispatcher.UnhandledException
。