{"record":{"id":"2507323664efc55e","repo":"cefsharp/CefSharp","slug":"an-instance-of-the-underlying-offscreen-browser-ha","errorCode":null,"errorMessage":"An instance of the underlying offscreen browser has already been created, this method can only be called once.","messagePattern":"An instance of the underlying offscreen browser has already been created, this method can only be called once\\.","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"CefSharp.OffScreen/ChromiumWebBrowser.cs","lineNumber":355,"sourceCode":"                var renderHandler = RenderHandler;\n                RenderHandler = null;\n                renderHandler?.Dispose();\n            }\n\n            Cef.RemoveDisposable(this);\n        }\n\n        /// <summary>\n        /// Create the underlying browser. The instance address, browser settings and request context will be used.\n        /// </summary>\n        /// <param name=\"windowInfo\">Window information used when creating the browser</param>\n        /// <param name=\"browserSettings\">Browser initialization settings</param>\n        /// <exception cref=\"System.Exception\">An instance of the underlying offscreen browser has already been created, this method can only be called once.</exception>\n        public void CreateBrowser(IWindowInfo windowInfo = null, IBrowserSettings browserSettings = null)\n        {\n            if (browserCreated)\n            {\n                throw new Exception(\"An instance of the underlying offscreen browser has already been created, this method can only be called once.\");\n            }\n\n            browserCreated = true;\n\n            if (browserSettings == null)\n            {\n                browserSettings = Core.ObjectFactory.CreateBrowserSettings(autoDispose: true);\n            }\n\n            if (windowInfo == null)\n            {\n                windowInfo = Core.ObjectFactory.CreateWindowInfo();\n                windowInfo.SetAsWindowless(IntPtr.Zero);\n            }\n\n            //TODO: We need some sort of timeout and\n            //if we use the same approach for WPF/WinForms then\n            //we need to move the common code into the partial class","sourceCodeStart":337,"sourceCodeEnd":373,"githubUrl":"https://github.com/cefsharp/CefSharp/blob/16bc6e0711a4945be17e8bc4bc7ccf9469f3fdec/CefSharp.OffScreen/ChromiumWebBrowser.cs#L337-L373","documentation":"Thrown by ChromiumWebBrowser.CreateBrowser when the underlying offscreen browser has already been created (browserCreated flag is true). CEF only allows one native browser instance per ChromiumWebBrowser, so a second CreateBrowser call is rejected. The flag is set immediately before actual creation to prevent re-entrancy.","triggerScenarios":"Calling CreateBrowser() twice. Calling CreateBrowser() after the implicit creation triggered by the constructor or by accessing a property that lazily initializes the browser.","commonSituations":"Constructor with an initial URL auto-creates the browser; a later explicit CreateBrowser call collides. Calling CreateBrowser in a Loaded event that also runs because of autoInit. Reusing a disposed ChromiumWebBrowser instance.","solutions":["Check IsBrowserInitialized / browserCreated before calling CreateBrowser.","Avoid both an auto-initializing constructor and an explicit CreateBrowser — pick one strategy.","If you need a fresh browser, dispose the old ChromiumWebBrowser and create a new instance."],"exampleFix":"// before\nbrowser.CreateBrowser();\n\n// after\nif (!browser.IsBrowserInitialized && !browserCreated)\n    browser.CreateBrowser();","handlingStrategy":"validation","validationCode":"if (browser.IsBrowserInitialized || browserCreated) return;\nbrowser.CreateBrowser();","typeGuard":"public static bool CanCreateBrowser(ChromiumWebBrowser b) => !b.IsBrowserInitialized;","tryCatchPattern":"try { browser.CreateBrowser(windowInfo, settings); }\ncatch (Exception ex) when (ex.Message.Contains(\"already been created\")) { /* already initialized, ok */ }","preventionTips":["Choose either constructor auto-init or explicit CreateBrowser — not both.","Check IsBrowserInitialized before calling CreateBrowser.","Dispose and recreate the ChromiumWebBrowser to start fresh."],"tags":["offscreen","browser-created","lifecycle","double-init"],"backgroundTag":null,"analyzedSha":"16bc6e0711a4945be17e8bc4bc7ccf9469f3fdec","analyzedAt":"2026-08-13T19:57:05.828Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}