WPF,VB和Application对象

时间:2010-07-10 19:16:04

标签: wpf winforms vb6

情景:

  • VB 6表单有一个InteropControl(WinForms)。
  • InteropControl有一个ElementHost
  • ElementHost有我的WPF控件

除了Application.Current在我需要它时似乎为null之外,一切似乎都在工作。我真正想做的就是在第一个表单完全显示之前挂钩到未处理的异常事件。

  1. 在这种情况下是否创建了WPF应用程序对象?
  2. 如果是这样,何时创建?
  3. 如果没有,是什么原因导致消息被抽出?
  4. 如果我在后台线程上启动Application对象会发生什么?

2 个答案:

答案 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