2016-11-10 35 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保持在那裏,所以我不需要通過窗體來傳遞它,當我需要它到更深的地方 - 一些簡單的單例,但在星期一。