CEF - 一个接一个地多次运行窗口

时间:2016-11-10 10:31:40

标签: c# winforms chromium chromium-embedded cefsharp

我有一个以后台启动的WinForm应用程序(在Program.cs中循环)。收到消息后,它会显示带有CEF浏览器的表单

static void Main(string[] args) {
    while(true){

        if(messageReceived()){
            if(Program.message == 200) {
                Application.Run(new Form());
            }
            else {
                Environment.Exit(0);
            }
        }
    }
}

窗口:

private CefSharp.WinForms.ChromiumWebBrowser browserChrome;

private void Form_Load(object sender, EventArgs e) {
    this.browserChrome = new CefSharp.WinForms.ChromiumWebBrowser(String.Empty);
    this.browserChrome.Load("htp://www.google.pl");
}

这是第一次使用,但在我关闭我的表单后,应用程序再次开始检查邮件,当我想再次打开我的表单时,整个Exe崩溃: “ChromeApp停止工作”

中发生错误

libcef.dll,版本:3.2785.1482.0,时间戳:0x57eb4d4e

是否可以使用Chromium运行此表单两次?

非常感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您确定需要使用Application.Run(new Form());吗?也许new form().Show()会对你有用吗?这将启动一个新表单,但不是一个全新的应用程序。

答案 1 :(得分:0)

我已经尝试过 - 说实话,这是我的第一个想法之一,但没有。我想出了一些"脏"溶液

只是解释一下,Cef.Initialize()在我的原始代码中,我只是忘了把它放在我的例子中。我稍微修改了我的代码,它现在正在运行。

eval

和窗口:

static void Main(string[] args) {
    Cef.Initialize(new Cef.Settings());

    var chromeBrowser = new CefSharp.WinForms.ChromiumWebBrowser(String.Empty);
    while(true){

        if(messageReceived()){
            if(Program.message == 200) {
                var form = new Form();
                form.ChromeBrowser = chromeBrowser;

                Application.Run(form);
            }
            else {
                Cef.Shutdown();
                Environment.Exit(0);
            }
        }
    }
}

它使Chromium及其需要的所有东西保持活力并且全时工作。

我想我会写一堂课,让我的Chromium留在那里,所以当我需要更深层次的东西时,我不必通过表格传递它 - 一些简单的单身,但是星期一。 / p>