Несколько форм с одной инициализацией - PullRequest
0 голосов
/ 12 февраля 2019

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

код, вызываемый инициатором

        var cef_settings = InitCef();

        logger.Info($"Chromium: '{CefSharp.Cef.ChromiumVersion}', CEF: '{CefSharp.Cef.CefVersion}', CefSharp: '{CefSharp.Cef.CefSharpVersion}', BrowserSubprocessPath: '{cef_settings.BrowserSubprocessPath}'.");
        foreach (var okta in creds)
        {
            logger.Info($"Running with username: {okta.Username}");

            using (var MyForm = new FrmScraper(okta, client))
            {
                Application.Run(MyForm);
            }
        }
        CefSharp.Cef.Shutdown();

Код в форме

    private void FrmScraper_FormClosing(object sender, FormClosingEventArgs e)
    {
        Logger.Trace(string.Format("FrmScraper_FormClosing: Started, Reason: '{0}'", e.CloseReason.ToString()));
        if (chromeBrowser != null)
        {
            chromeBrowser.LoadingStateChanged -= ChromeBrowser_LoadingStateChanged;
            chromeBrowser.ConsoleMessage -= ChromeBrowser_ConsoleMessage;
            if (Controls.Contains(chromeBrowser))
                Controls.Remove(chromeBrowser);
            chromeBrowser.Dispose();
            chromeBrowser = null;
        }
        Logger.Trace("FrmScraper_FormClosing: GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);");
        GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);

        Logger.Trace("FrmScraper_FormClosing: Calling GC.WaitForPendingFinalizers();");
        GC.WaitForPendingFinalizers();

        Logger.Trace("FrmScraper_FormClosing: Ended");
    }

Вызывается из Form_Load

    private void InitializeChromium(string Address)
    {
        Logger.Trace("InitializeChromium: Started");

        Logger.Trace("InitializeChromium: Step 1");
        var requestContextSettings = new RequestContextSettings
        {
            CachePath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "GenesysCustomerCare", DateTime.Now.ToString("yyyy-MM-dd"), Guid.NewGuid().ToString("d"))
        };
        var requestContext = new RequestContext(requestContextSettings);
        Logger.Trace($"InitializeChromium: CachePath: '{requestContextSettings.CachePath}'.");
        Logger.Trace("InitializeChromium: Step 2");

        // Create a browser component
        // This is the line that hangs on subsequent runs.
        chromeBrowser = new ChromiumWebBrowser(Address)
        {
            RequestContext = requestContext
        };
        Logger.Trace("InitializeChromium: Step 3");

        // Add it to the form and fill it to the form window.
        Controls.Add(chromeBrowser);
        Logger.Trace("InitializeChromium: Step 4");
        chromeBrowser.Dock = DockStyle.Fill;
        chromeBrowser.LoadingStateChanged += ChromeBrowser_LoadingStateChanged;
        chromeBrowser.ConsoleMessage += ChromeBrowser_ConsoleMessage;
        Logger.Trace("InitializeChromium: Ended");
    }
...