2008-09-04 5 views
2

Когда это называется? Более конкретно, у меня есть элемент управления, который я создаю - как я могу освобождать дескрипторы, когда окно закрыто. В нормальном win32 я бы сделал это во время wm_close - это DestroyHandle эквивалент .net?Когда называется Control.DestroyHandle?


Я не хочу, чтобы уничтожить окно справиться сам - мой контроль прослушивает события на другом объекте и, когда мой контроль разрушен, я хочу прекратить слушать эти события. Например:

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

ответ

3

Обычно DestroyHandle вызывается в методе Dispose. Поэтому вам необходимо убедиться, что все элементы управления расположены во избежание утечки ресурсов.

2

Dispose действительно звонит DestroyHandle, но не всегда. Если я закрою родительское окно, то Windows уничтожит все дочерние окна. В этой ситуации Dispose не будет звонить DestroyHandle (так как он уже уничтожен). Другими словами, для уничтожения окна вызывается DestroyHandle, он не вызывается, когда окно уничтожается.

Решение должно отменить либо OnHandleDestroyed, либо Dispose. Я выбираю Dispose.

+0

Из любопытства, почему вы хотите уничтожить ручку самостоятельно? В моей практике я не помню случая, когда мне нужно было явно вызвать DestroyHandle. Не могли бы вы объяснить свое дело? – aku 2008-09-04 12:08:59

Смежные вопросы