.NET WPF:从WinForm应用程序重复调用WPF表单的问题

时间:2011-07-21 17:57:38

标签: .net wpf winforms

正如标题所述,我从WinForm应用程序(在调用堆栈之间有多个类)中多次调用WPF表单。最初,WPF只工作过一次。经过一些谷歌搜索,我发现我必须将ShutdownMode.OnExplicitShutdown添加到WPF应用程序创建。

现在,在添加之后,在退出第一个WPF表单时,控件永远不会从“运行”调用返回,并且焦点将返回到WinForm对话框。如果我退出,我终于从WPF运行返回控制。

Winform的:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
MainForm form = new MainForm();
Application.Run(form);

WPF pre-init:

application = new System.Windows.Application
{
    ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown
};

调用WPF表单:

ConfirmForm form = new ConfirmForm();
application.Run(form);

这里发生了什么?:

1 个答案:

答案 0 :(得分:3)

Application.Run(在WinForms和WPF中)是一个阻塞调用,它运行消息循环,并在应用程序准备退出时返回。

您应该致电Show(),其中会显示FormWindow并立即返回。

但是,您需要调用ElementHost.EnableModelessKeyboardInterop告诉WPF使用WinForms消息循环。