2016-11-10 224 views
1

我有一个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); 
      } 
     } 
    } 
} 

CEF浏览器窗口形式:

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"); 
} 

它的工作原理是第一次,但在我结束我的形态,应用程序再次开始检查邮件当我想再次打开自己的状态,整个埃克崩溃: “ChromeApp停止工作” 错误

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

是否有可能使用铬运行此表单两次?

非常感谢您的帮助

回答

1

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

0

我已经尝试过 - 说实话这是我的第一个想法之一,但没有。我想出了一些“肮脏”的解决方案。

只是为了解释,Cef.Initialize()是在我原来的代码中,我忘了把它放在我的例子中。我修改了一下我的代码,它现在正在工作。

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); 
      } 
     } 
    } 
} 

和窗口:

private CefSharp.WinForms.ChromiumWebBrowser browserChrome; 

public CefSharp.WinForms.ChromiumWebBrowser ChromeBrowser { 
    set { 
     this.browserChrome = value; 
    } 
} 

private void Form_Load(object sender, EventArgs e) { 
    this.browserChrome.Load("htp://www.google.pl"); 
} 

它使铬,它需要活着,整个工作时间的一切。

我想我要写一个类来让我的Chromium保持在那里,所以我不需要通过窗体来传递它,当我需要它到更深的地方 - 一些简单的单例,但在星期一。