2016-11-10 17 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"); 
} 

これが初めて動作しますが、私は自分のフォームを閉じた後、アプリケーションは再びメッセージをチェックするために開始します私は再び私のフォームを開きたいときや、全体のエグゼがクラッシュ: エラーが

libcef.dll、バージョンに発生した「ChromeAppは動作を停止」:3.2785.1482.0、タイムスタンプ:0x57eb4d4e

このフォームをChromiumで2回実行することはできますか?

は助け

答えて

1

いただき、誠にありがとうございます、あなたがApplication.Run(new Form());を使用する必要がありますか?たぶんnew form().Show()があなたの代わりに働くでしょうか?これにより新しいフォームが起動されますが、新しいアプリケーション全体は起動しません。

0

私はすでにそれを試しています - それは私の最初のアイデアの1つでしたが、正直ではありません。私はいくつかの "汚い"解決策を考え出した。

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

それはクロム、それは生きていると作業全体の時間を必要とするすべてのものを保持します。

私はクロムをそこに閉じ込めるクラスを書くつもりだと思うので、私はそれをどこかでもっと深く必要とするときにフォームに渡す必要はありません - 単純なシングルトンも、それは月曜日です。

関連する問題