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 以防止关闭表单。
所以正如标题所说,我不知道为什么会有这个"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 以防止关闭表单。