Home > Software design >  How to create more than one browser with CefSharp on a Windows Form?
How to create more than one browser with CefSharp on a Windows Form?

Time:10-29

I use CefSharp for browsing websites I get an error that prevents me from opening another web browser even if I closed the one that is already open.

Error image

Error image without extra description

Error Text (Details)

Bu iletişim kutusu yerine JIT hata ayıklamayı çağırma
hakkında detaylı bilgi için bu iletinin sonuna bakın.

************** Özel Durum Metni **************
System.Exception: CEF can only be initialized once per process. This is a limitation of the underlying CEF/Chromium framework. You can change many (not all) settings at runtime through RequestContext.SetPreference. See https://github.com/cefsharp/CefSharp/wiki/General-Usage#request-context-browser-isolation Use Cef.IsInitialized to guard against this exception. If you are seeing this unexpectedly then you are likely calling Cef.Initialize after you've created an instance of ChromiumWebBrowser, it must be before the first instance is created.
   konum: CefSharp.Core.Cef.Initialize(CefSettingsBase cefSettings, Boolean performDependencyCheck, IApp cefApp) C:\projects\cefsharp\CefSharp.Core.Runtime\Cef.h içinde: satır 260
   konum: CefSharp.Core.Cef.Initialize(CefSettingsBase cefSettings, Boolean performDependencyCheck, IBrowserProcessHandler browserProcessHandler) C:\projects\cefsharp\CefSharp.Core.Runtime\Cef.h içinde: satır 242
   konum: CefSharp.Cef.Initialize(CefSettingsBase settings, Boolean performDependencyCheck, IBrowserProcessHandler browserProcessHandler) C:\projects\cefsharp\CefSharp.Core\Cef.cs içinde: satır 146
   konum: _404_Masaüstü_Uygulaması.SlaytBrowser.SlaytBrowser_Load(Object sender, EventArgs e) C:\Users\Harun\source\repos\Uc_Haftada_C_Sharp\404 Masaüstü Uygulaması\404 Masaüstü Uygulaması\SlaytBrowser.cs içinde: satır 31
   konum: System.Windows.Forms.Form.OnLoad(EventArgs e)
   konum: System.Windows.Forms.Form.OnCreateControl()
   konum: System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   konum: System.Windows.Forms.Control.CreateControl()
   konum: System.Windows.Forms.Control.WmShowWindow(Message& m)
   konum: System.Windows.Forms.Control.WndProc(Message& m)
   konum: System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   konum: System.Windows.Forms.Form.WmShowWindow(Message& m)
   konum: System.Windows.Forms.Form.WndProc(Message& m)
   konum: System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   konum: System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   konum: System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Yüklü Derlemeler **************
mscorlib
    Bütünleştirilmiş Kod Sürümü: 4.0.0.0
    Win32 Sürümü: 4.8.4515.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
404 Masaüstü Uygulaması
    Bütünleştirilmiş Kod Sürümü: 1.0.0.0
    Win32 Sürümü: 1.0.0.0
    CodeBase: file:///C:/Users/Harun/source/repos/Uc_Haftada_C_Sharp/404 Masaüstü Uygulaması/404 Masaüstü Uygulaması/bin/x86/Debug/404 Masaüstü Uygulaması.exe
----------------------------------------
System.Windows.Forms
    Bütünleştirilmiş Kod Sürümü: 4.0.0.0
    Win32 Sürümü: 4.8.4550.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Bütünleştirilmiş Kod Sürümü: 4.0.0.0
    Win32 Sürümü: 4.8.4536.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Bütünleştirilmiş Kod Sürümü: 4.0.0.0
    Win32 Sürümü: 4.8.4390.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    Bütünleştirilmiş Kod Sürümü: 4.0.0.0
    Win32 Sürümü: 4.8.4190.0 built by: NET48REL1LAST_B
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    Bütünleştirilmiş Kod Sürümü: 4.0.0.0
    Win32 Sürümü: 4.8.4566.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
    Bütünleştirilmiş Kod Sürümü: 4.0.0.0
    Win32 Sürümü: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
mscorlib.resources
    Bütünleştirilmiş Kod Sürümü: 4.0.0.0
    Win32 Sürümü: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_tr_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
Accessibility
    Bütünleştirilmiş Kod Sürümü: 4.0.0.0
    Win32 Sürümü: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
CefSharp.WinForms
    Bütünleştirilmiş Kod Sürümü: 106.0.290.0
    Win32 Sürümü: 106.0.290.0
    CodeBase: file:///C:/Users/Harun/source/repos/Uc_Haftada_C_Sharp/404 Masaüstü Uygulaması/404 Masaüstü Uygulaması/bin/x86/Debug/CefSharp.WinForms.DLL
----------------------------------------
CefSharp.Core
    Bütünleştirilmiş Kod Sürümü: 106.0.290.0
    Win32 Sürümü: 106.0.290.0
    CodeBase: file:///C:/Users/Harun/source/repos/Uc_Haftada_C_Sharp/404 Masaüstü Uygulaması/404 Masaüstü Uygulaması/bin/x86/Debug/CefSharp.Core.DLL
----------------------------------------
CefSharp
    Bütünleştirilmiş Kod Sürümü: 106.0.290.0
    Win32 Sürümü: 106.0.290.0
    CodeBase: file:///C:/Users/Harun/source/repos/Uc_Haftada_C_Sharp/404 Masaüstü Uygulaması/404 Masaüstü Uygulaması/bin/x86/Debug/CefSharp.DLL
----------------------------------------
CefSharp.Core.Runtime
    Bütünleştirilmiş Kod Sürümü: 106.0.290.0
    Win32 Sürümü: 106.0.290
    CodeBase: file:///C:/Users/Harun/source/repos/Uc_Haftada_C_Sharp/404 Masaüstü Uygulaması/404 Masaüstü Uygulaması/bin/x86/Debug/CefSharp.Core.Runtime.DLL
----------------------------------------
System.Windows.Forms.resources
    Bütünleştirilmiş Kod Sürümü: 4.0.0.0
    Win32 Sürümü: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_tr_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

************** JIT Hata Ayıklama **************
JIT hata ayıklamayı etkinleştirmek için, bu uygulamanın veya
bilgisayarın (machine.config) .config dosyasında
system.windows.forms bölümünde jitDebugging değeri ayarlanmış olmalıdır.
Ayrıca uygulama hata ayıklama etkin durumdayken derlenmiş
olmalıdır.

Örneğin:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

JIT hata ayıklama etkinken, işlenmemiş özel durumlar
bu iletişim kutusunda işlenmek yerine bilgisayarda kayıtlı
JIT hata ayıklayıcısına gönderilir.

I want to do those actions :

  • I can create new cefsharp window without an error whether I closed already opened browsers or not.

Code to create new SlaytBrowser Form

        private void ders6btn_Click(object sender, EventArgs e)
        {
            SlaytBrowser slayt_acici = new SlaytBrowser();
            slayt_acici.url = "https://www.google.com";
            slayt_acici.Show();
        }

Code For SlaytBrowser Form

        private void SlaytBrowser_Load(object sender, EventArgs e)
        {
            CefSettings settings = new CefSettings();
            settings.CefCommandLineArgs.Add("disable-gpu", "1");
            Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null);
            chrome = new ChromiumWebBrowser(url);
            this.panel1.Controls.Add(chrome);
            chrome.Dock = DockStyle.Fill;
            chrome.AddressChanged  = Chrome_AddressChanged;
        }

        private void Chrome_AddressChanged(object sender, AddressChangedEventArgs e)
        {
            this.Invoke(new MethodInvoker(() =>
            {
                url = e.Address;
            }));
        }

        private void button1_Click(object sender, EventArgs e)
        {
            chrome.Load(url);
        }

CodePudding user response:

Only call Cef.Initialize if Cef.IsInitialized == false

private void SlaytBrowser_Load(object sender, EventArgs e)
{
        if (!Cef.IsInitialized)
        {
          CefSettings settings = new CefSettings();
          settings.CefCommandLineArgs.Add("disable-gpu", "1");
          Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null);
        }
        chrome = new ChromiumWebBrowser(url);
        this.panel1.Controls.Add(chrome);
        chrome.Dock = DockStyle.Fill;
        chrome.AddressChanged  = Chrome_AddressChanged;
}
  • Related