2016-11-10 8 views
1

У меня есть приложение WinForm, которое начинается в фоновом режиме (цикл в Program.cs). После получения сообщения он показывает форму с CEF браузером в нем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 или нет?

Большое спасибо за помощь

ответ

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

Он держит Хром и все, что он нуждается в живой и работает все время.

Я думаю, что собираюсь написать класс, чтобы держать Хром в нем, поэтому мне не придется проходить его через формы, когда мне это нужно где-то глубже - какой-то простой синглтон, но это в понедельник.