【问题标题】:WPF starting a new Winform CefsharpWPF 启动新的 Winform Cefsharp
【发布时间】:2017-11-10 11:23:18
【问题描述】:

我一直在 WPF 中工作并尝试从该区域启动 Winform。唯一的解决方案是将其打开为ShowDialog()。这是一个错误还是我们可以预期将来会出现任何问题? 我的其他程序位于同一个解决方案中,但不在同一个命名空间中。

WindowsFormsApplication1.Form1 program2 = new WindowsFormsApplication1.Form1();
program2.ShowDialog();

【问题讨论】:

  • 这个问题和C语言有什么关系?
  • 没有c#标签,有c标签。标签很重要,应该是正确的。不,我没有投票关闭。
  • 请查看您的标签。 cwpfwinformsc 标签用于 C 编程语言。因此我的问题是:“C 语言与这个问题有什么关系”。这是为了澄清您的问题和标签。
  • 这就是为什么我询问而不是投反对票、举报或只是在没有明确您的意图的情况下进行更改。
  • 你是说.Show() 不起作用?我从来没有尝试过以这种方式完全混合它们,但这对我来说似乎很奇怪。

标签: c# wpf winforms cefsharp


【解决方案1】:

我刚刚对此进行了测试,它对我有用:

public partial class MainWindow : Window
{
    private Form winForm;
    public MainWindow()
    {
        InitializeComponent();
    }

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        winForm = new WinForm1();
        winForm.Show();
    }
}

我相信你的问题很可能是由于你的program2 在你尝试调用Show 后立即超出范围,这比你看到的更快地关闭它。 ShowDialog 起作用的原因是因为它是一个阻塞调用,它将窗口保持在范围内并打开直到它关闭。

尝试将 program2 声明为 WPF Window 类中的 字段,而不是作为局部变量。这将使其保持在范围内。

【讨论】:

  • 我应该提到它,但我的其他程序位于同一个解决方案中,但不是同一个命名空间。
  • 这应该不会影响任何事情。在我的测试中,两个窗口也是同一个项目的一部分。这应该在单独的项目中与它们一起使用,甚至当 WinForms 窗口来自引用的程序集时。
  • 在这里,当我使用 Show() 时,新程序停止/崩溃,该程序中没有任何内容。工作在 64 位......他们俩。
  • 您遇到的问题一定出在其他地方,而不仅仅是因为在 WPF 的 WinForms 窗口上调用了Show。我以最简单的形式重新创建了它,并且效果很好。如果您能以某种方式授予我访问权限,我很乐意为您查看您的项目。
  • 嗯,奇怪。你确定它不是 WinformHost 吗?我正在使用 Visual Basic 2015 .Net 4.6.1。
【解决方案2】:

我发现了问题...program2.Show() 不起作用的原因是 Cefsharp 在通过 javascript 启动第二个程序期间加载进度条(Javascript)未完成加载。你可以用 Cefsharp 来识别这些问题,方法是将它们标记到

 if (browser.CanExecuteJavascriptInMainFrame)
                    {
                        WindowsFormsApplication1.Form1 program2 = new WindowsFormsApplication1.Form1();
                        program2.Show();
                    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-04
    • 2013-06-28
    • 2015-11-10
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多