2008-09-04 15 views
2

これはいつ呼び出されますか?具体的には、私は作成しているコントロールを持っています - ウィンドウが閉じられたらハンドルを解放する方法はありますか?通常のwin32では、私はwm_closeの間にそれをやっていました - DestroyHandle .net相当ですか?私は、ウィンドウは自分自身を扱う破壊したくないControl.DestroyHandleはいつ呼び出されますか?


- 私のコントロールは、別のオブジェクトのイベントのために待機していると私のコントロールが破棄されたとき、私はそれらのイベントのリスニングを停止します。例:

void Dispose(bool disposing) { 
    otherObject.Event -= myEventHandler; 
} 

答えて

3

通常DestroyHandleDispose方法で呼び出されています。したがって、リソースリークを避けるためにすべてのコントロールが配置されていることを確認する必要があります。

2

Disposeは、必ずしもそうではありませんが、DestroyHandleを呼び出します。親ウィンドウを閉じると、Windowsはすべての子ウィンドウを破棄します。この状況では、DisposeDestroyHandleを呼び出しません(既に破棄されているため)。つまり、DestroyHandleが呼び出されてウィンドウが破棄され、ウィンドウが破棄されたときには呼び出されません。

解決策は、OnHandleDestroyedまたはDisposeのいずれかを上書きすることです。私はDisposeを選んでいます。

+0

好奇心から、あなたはどうして自分自身を破壊したいのですか?私の練習では、明示的にDestroyHandleを呼び出す必要がある場合は思い出せません。あなたの事件を説明していただけますか? – aku

関連する問題