C# のファイナライザー (別名デストラクタ) は、たとえば C のデストラクタとは異なります。オブジェクト インスタンスの後にクリーンアップする場所ではありません。
代わりに、window オブジェクトのイベントを使用して、そのようなものをキャッチする必要があります。
インターフェイスを実装するオブジェクトではIDisposable
、ファイナライザーは、オブジェクトが適切に破棄されていない場合にのみ実行されます。Dispose
メソッドは通常、メソッドを使用してGC.SuppressFinalize
オブジェクトをファイナライザー キューから削除するため、通常、ファイナライザーはまったく呼び出されません。クリーンアップはDispose
メソッドによって行われます。
ファイナライザーが呼び出される場合は、ガベージ コレクターによって実行される別のスレッドによって呼び出されます。これはアプリケーションのメイン スレッドではないため、ファイナライザーで GUI 関連の操作を行うことはできません。ファイナライザは、オブジェクトがガベージ コレクションされる直前に呼び出されるため、未使用になった直後ではなく、しばらくしてから呼び出されます。
また、オブジェクトが適切に破棄されていない場合でも、ファイナライザーが実行されるとは限りません。アプリケーションが閉じられると、ガベージ コレクターはしばらくの間、ファイナライザー キュー内のオブジェクトからファイナライザーを実行しますが、一定の時間が経過すると、ファイナライザーを呼び出さずにすべてのオブジェクトを放棄して強制終了します。