Да, ваш подход правильный с точки зрения управления памятью. PostMessage
и Dispose
правильно справиться с управляемым типом. Это действительно то, что они существуют.
Некоторые нюансы:
- Проверьте возвращаемое значение
PostMessage
. Если это не удается, сообщение не было отправлено, и поток должен избавиться от памяти. - Не используйте дескриптор формы в качестве получателя. Состояние гонки. Окно формы может быть воссоздано одновременно с отправкой сообщения. Затем сообщение будет потеряно. Или еще хуже, если ручка повторно используется. Или, что еще хуже, окно может быть воссоздано неправильно. Вместо этого используйте
AllocateHWnd
для создания дескриптора окна, жизнь которого вы контролируете. - Вы
try/finally
ошибаетесь. Онtry
должен появиться после того, как ресурс был приобретен. Это одна из самых распространенных ошибок, которые мы видим здесь. В вашем коде это, скорее всего, доброкачественное, потому что назначение не может вызвать исключение, но оно все равно стоит быть точным.