2011-01-20 7 views
3

私のC#ActiveXコントロールはInternet Explorer 8でホストされています。コントロールがアンロードされたときにコードを実行します。ActiveXコントロールDispose(true)が呼び出されない

私は次のことを試してみました:

... 
public class ActiveXControl : Control 
{ 
    protected override void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      // Cleanup 
     } 
    } 
} 
... 

しかし、処分が(ファイナライザから呼び出されます)オールウェイズfalseです。管理オブジェクトにアクセスする必要があるので、私はそれを使うことはできません。

ブラウザがコントロールを「アンロード」するときに、クリーンアップコードを呼び出す方法を教えてください。

IOleObject :: Closeメソッドが見つかりました。これはControlクラスによって実装されていますが、AFAIK therはその動作をオーバーライドできません。

+0

一般に、IEブラウザ拡張(BHO、ツールバー、またはActiveXコントロール)を.NETに記述することはお勧めできません。 – EricLaw

+0

@ Eric:これはよく知られている環境でのみ使用されます。私の特別なケースでは、私はどんなdiasdvantagesも考えることができません。多分それについての記事がありますか? –

+0

VisibleChangedイベントは、ページから移動すると発生することがわかりました。 他の解決策はまだ見つかりましたか? – mbeckish

答えて

1

私はこれをやっていませんが、試してみてください:ウェブページのhtmlに埋め込まれたjavascriptを書き込むことができます。これは、ページが離れてナビゲート。このメソッドからクリーンアップコードを呼び出すことができます。

+0

これは確実に機能します。しかし、私は非javascriptソリューションを好むだろう。 –

1

IEがコントロールウィンドウを破棄するときに呼び出される、OnHandleDestroyed()をオーバーライドすることができます。

+0

試しましたが、決して呼ばれません。 –

関連する問題