2017-01-30 8 views
0

タイトルに「ObejectDisposedException」がある理由がわかりません。 "OnDownloadUpdated(..)"の最後の呼び出し中にダウンロードが完了したときに発生しています。ObjectDisposedExceptionしかし、なぜ、何が処分されていますか?

「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(); 
      } 
     }); 
    } 

答えて

0

これは競合状態です。 OnDownloadUpdated(他のスレッドから呼び出されると仮定します)の間にFormが終了すると、最初にどの操作が終了するかが決まります:フォームの廃棄またはOnDownloadUpdated。メソッドが終了している場合は、このチェックをForm.Closingイベントで禁止します。そうでない場合は、Closing.Cancelをtrueに設定してフォームを閉じないようにします。

+0

フォームはダウンロード中に表示されず、コード内のどこでも閉じないので、これは問題ではないと思います。 –

+0

例外の行が "this.Invoke(..)"の場合は、フォームが破棄されたことを意味します。今、あなたはそれが処分された理由を理解する必要があります。例外をスローするエラー行にあるオブジェクトは、その.Dispose()メソッドが呼び出されています。ダウンロード中にフォームを非表示にしないようにしてください。フォームが問題であるかどうかをすぐに発見すると思います。 – Wolf5

+0

ありがとうございます。 "this.visible = false"を削除することによって解決されましたが、なぜこの行が問題であったのか本当に分かりません。 –

関連する問題