【问题标题】:Question System.ExecutionEngineException while loading WPF window from Windows Form从 Windows 窗体加载 WPF 窗口时出现 System.ExecutionEngineException 问题
【发布时间】:2010-09-25 00:04:31
【问题描述】:

我发现了一些相当奇怪的行为......

这里是如何复制问题:

  1. 创建 WPF 应用程序项目。
  2. 从 App.xaml 文件中删除 StartupUri。
  3. 使用签名“private void Application_Startup(object sender, StartupEventArgs e)”向应用添加启动事件处理程序
  4. 现在,向项目中添加一个表单(右键单击并选择添加新项目)。
  5. 在Application_Startup方法中,创建表单对象并显示为Form1 f1 = new Form1(); f1.ShowDialog();
  6. 在实际的 Form1 上,为设计器添加一个按钮,并为该按钮添加一个单击事件处理程序。
  7. 向项目中添加一个新的 WPF 窗口 Window1。
  8. 在步骤 6 中创建的 Form1 的按钮单击事件处理程序中,添加创建显示 WPF 窗口的代码行:Window1 w1 = new Window1(); w1.Show();
  9. 运行项目并单击 winform 上的按钮以显示 WPF 窗口...到目前为止工作正常。
    1. 关闭 WPF 窗口并再次单击 winform 的按钮。这次你应该得到异常。

所以,基本上我所做的是创建一个显示 winform 的 WPF 应用程序。然后,winform 会显示一个 WPF 窗口。

第一次显示 WPF 窗口时,一切正常。如果它被关闭,然后重新打开,我得到异常!我还可以通过多次单击该按钮来打开多个 WPF 窗口。但是,一旦关闭了最后一个,我就再也无法打开另一个了...

我也尝试了http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/442782b1-00a1-4e2e-9cc6-ae99b6699126/ 建议的各种技巧,但没有帮助。

为什么会这样?

【问题讨论】:

    标签: wpf winforms integration


    【解决方案1】:

    默认的 Wpf 应用程序关闭行为(在 VS 的项目属性中的“应用程序”选项卡上指定或使用 Application.Xaml 中的 ShutdownMode 属性指定)是“在最后一个窗口关闭时”。这意味着当您关闭您创建的 Wpf 窗口时,Wpf 会关闭应用程序框架,因此任何后续窗口创建都会引发异常。

    您可以通过将关闭模式设置为“显式关闭”(Xaml 中的“OnExplicitShutdown”)来避免此问题。然后,当您希望应用程序终止时(例如,当 winforms 表单关闭时),您将需要显式手动调用 Application.Current.Shutdown。

    【讨论】:

    • +1。如果您要结束进程(例如 winform),是否还需要调用 Application.Current.Shutdown()?如果是,如果不这样做会怎样?
    • 您展示了 xaml,因为我将 WPF Windows 添加到我的 WinForms 应用程序中我没有 app.xaml 所以在 Program.cs 中我在创建 System.Windows.Application 的新实例时添加了这个. System.Windows.Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多