Я бы не думал, что SafeHandle
добавит какое-либо значение. MSDN предоставляет следующие замечания по использованию SafeHandle
s (выделено мое):
Класс SafeHandle обеспечивает защиту для атак безопасности при утилизации ручки; это также обеспечивает критическую доработку ресурсов дескриптора. Этот класс позволяет передавать неуправляемому коду дескриптор неуправляемому ресурсу (например, дескриптору операционной системы), заключенному в экземпляр производного класса. Обеспечивает защиту от атак безопасности путем утилизации ручек . Примером повторной обработки дескриптора является ненадежный пользователь вашего дескриптора, пытающийся поставить в очередь операции с ресурсом в одном потоке, закрывая дескриптор в другом. Ненадежный пользователь сделает это в надежде на то, что дескриптор сразу же будет повторно использован каким-то не связанным потоком в процессе, а внутрипроцессная операция возвращает или изменяет данные, которые обычно недоступны для вызывающей стороны. SafeHandle также обеспечивает критическую финализацию : метод ReleaseHandle запускается даже тогда, когда хост загружает домен приложений, или если обычные финализаторы блокируются или занимают слишком много времени для очистки.
Ни одна из этих двух целей не представляется применимой к дескриптору окна, возвращенному из объекта Windows Forms Control
. Ручка рециркуляция кажется MÕÕT приведена типичными обычаи Handle
свойства а Control
's, а также рамки и операционная система предпринимать какие-либо вопросы о финализации из ваших рук с оконными ручками.
Еще один способ думать об этом заключается в следующем: чтобы использовать SafeHandle
, вам необходимо предоставить реализацию для свойства IsInvalid
и метода ReleaseHandle
. Насколько мне известно, свойство Control.Handle
никогда не вернет недопустимое значение, а дескриптор окна будет и должен «освобождаться» только после удаления элемента управления.
Тем не менее, сама инфраструктура оборачивает дескрипторы окон в HandleRef
объект, когда использует их, что просто защищает элемент управления от сборщика мусора, когда дескриптор используется неуправляемым кодом. Это то, что вам вряд ли понадобится в типичных сценариях, когда вам понадобится дескриптор окна, но для его использования практически не требуется работа, если есть вероятность, что он вам может понадобиться.