2016-11-10 4 views
1

Ich habe eine WinForm-App, die im Hintergrund startet (Schleife in Program.cs). Nach dem Empfang einer Nachricht zeigt es Formular mit CEF Browser darinCEF - Fenster mehrmals nacheinander ausführen

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

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

Und Fenster:

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

Es zum ersten Mal funktioniert, aber nachdem ich meine Form zu schließen, startet App für Nachrichten erneut zu prüfen, und wenn ich wieder mein Formular öffnen möchten, ganze Exe stürzt ab: "ChromeApp aufgehört zu arbeiten" Fehler aufgetreten in

libcef.dll, Version: 3.2785.1482.0, Zeitstempel: 0x57eb4d4e

Kann dieses Formular zweimal mit Chromium oder nicht ausgeführt werden?

Vielen Dank für die Hilfe

Antwort

1

Sind Sie sicher, dass Sie Application.Run(new Form()); verwenden? Vielleicht würde new form().Show() stattdessen für Sie arbeiten? Dadurch wird ein neues Formular gestartet, jedoch keine vollständige neue Anwendung.

0

Ich habe es schon versucht - um ehrlich zu sein, das war eine meiner ersten Ideen, aber nichts. Ich habe eine "schmutzige" Lösung gefunden.

Nur um zu erklären, Cef.Initialize() ist in meinem ursprünglichen Code, ich habe nur vergessen, es in meinem Beispiel zu setzen. Ich habe meinen Code ein wenig modifiziert und es funktioniert jetzt.

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

und Fenster:

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

Es hält Chrom und alles, was sie am Leben und arbeiten ganze Zeit braucht.

Ich denke, ich werde eine Klasse schreiben, um mein Chromium dort zu halten, also muss ich es nicht durch Formulare weitergeben, wenn ich es irgendwo tiefer brauche - ein paar einfache Singletons, aber das am Montag.

Verwandte Themen