ObjectDisposedException 但为什么以及处置了什么?

ObjectDisposedException but why and what is disposed?

所以正如标题所说,我不知道为什么会有这个"ObejectDisposedException"。 在 "OnDownloadUpdated(..)".

的最后一次调用期间下载完成时发生

第"this.Invoke(..)"行抛出异常。

    ChromiumWebBrowser browser;

    public frmRocketPluginDownload()
    {
        InitializeComponent();

        var settings = new CefSettings();
        settings.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";


        Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);

        browser = new ChromiumWebBrowser("");
        browser.Dock = DockStyle.Fill;
        browser.AddressChanged += Browser_AddressChanged;
        browser.DownloadHandler = this;


        panelBody.Controls.Add(browser);
    }


    public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
    {
        this.Invoke((MethodInvoker)delegate
        {
            if (downloadItem.PercentComplete == 100)
            {
                this.Show();
            }
        });
    }

这是竞争条件。当 Form 在 OnDownloadUpdated 期间关闭时(我假设它是从其他线程调用的)然后是哪个操作先结束:Form disposing 或 OnDownloadUpdated。要防止在您的方法结束时检查 Form.Closing 事件,否则将 Closing.Cancel 设置为 true 以防止关闭表单。