HandleRef HandleRef HandleRef HandleRef Struct

Определение

Инкапсулирует управляемый объект, который содержит дескриптор для ресурса (передается в неуправляемый код с помощью вызова платформы).Wraps a managed object holding a handle to a resource that is passed to unmanaged code using platform invoke.

public value class HandleRef
[System.Runtime.InteropServices.ComVisible(true)]
public struct HandleRef
type HandleRef = struct
Public Structure HandleRef
Наследование
Атрибуты

Комментарии

Важно!

Начиная с .NET Framework 2,0, функциональность HandleRef класса была заменена SafeHandle классом и его производными классами, а также CriticalHandle классом.Starting with the .NET Framework 2.0, the functionality of the HandleRef class has been replaced by the SafeHandle class and its derived classes, as well as by the CriticalHandle class.

Если вы используете вызов неуправляемого кода для вызова управляемого объекта, и на него нет ссылок в других местах после вызова вызова неуправляемого кода, сборщик мусора может завершить управляемый объект.If you use platform invoke to call a managed object, and the object is not referenced elsewhere after the platform invoke call, it is possible for the garbage collector to finalize the managed object. Это действие освобождает ресурс и делает его недействительным, что вызывает сбой вызова неуправляемого кода.This action releases the resource and invalidates the handle, causing the platform invoke call to fail. Заключение дескриптора HandleRef в оболочку гарантирует, что управляемый объект не собирается сборщиком мусора до тех пор, пока не завершится вызов неуправляемого кода.Wrapping a handle with HandleRef guarantees that the managed object is not garbage collected until the platform invoke call completes. Описание служб вызова неуправляемого кода см. в разделе Использование неуправляемых функций DLL.For a description of platform invoke services, see Consuming Unmanaged DLL Functions.

Тип значения, например GCHandle, является специальным типом, распознаваемым маршалером взаимодействия. HandleRefThe HandleRef value type, like GCHandle, is a special type recognized by the interop marshaler. Обычная Незакрепленная GCHandle также предотвращает невременную сборку мусора, но HandleRef обеспечивает лучшую производительность.A normal, nonpinned GCHandle also prevents untimely garbage collection, yet HandleRef provides better performance. Хотя использование HandleRef для поддержания объекта в течение всего времени вызова неуправляемого кода является предпочтительным, можно также GC.KeepAlive использовать метод для той же цели.Although using HandleRef to keep an object alive for the duration of a platform invoke call is preferred, you can also use the GC.KeepAlive method for the same purpose.

Конструктор принимает два параметра:, Object представляющий оболочку, и IntPtr представляет неуправляемый маркер. HandleRefThe HandleRef constructor takes two parameters: an Object representing the wrapper, and an IntPtr representing the unmanaged handle. Упаковщик взаимодействия передает только дескриптор в неуправляемый код и гарантирует, что оболочка (передаваемая в качестве первого параметра конструктору HandleRef) остается в активном состоянии во время вызова.The interop marshaler passes only the handle to unmanaged code, and guarantees that the wrapper (passed as the first parameter to the constructor of the HandleRef) remains alive for the duration of the call.

Конструкторы

HandleRef(Object, IntPtr) HandleRef(Object, IntPtr) HandleRef(Object, IntPtr) HandleRef(Object, IntPtr)

Инициализирует новый экземпляр класса HandleRef, используя инкапсулируемый объект и дескриптор ресурса, используемого неуправляемым кодом.Initializes a new instance of the HandleRef class with the object to wrap and a handle to the resource used by unmanaged code.

Свойства

Handle Handle Handle Handle

Возвращает дескриптор для ресурса.Gets the handle to a resource.

Wrapper Wrapper Wrapper Wrapper

Возвращает объект, содержащий дескриптор для ресурса.Gets the object holding the handle to a resource.

Методы

ToIntPtr(HandleRef) ToIntPtr(HandleRef) ToIntPtr(HandleRef) ToIntPtr(HandleRef)

Возвращает внутреннее целочисленное представление объекта HandleRef.Returns the internal integer representation of a HandleRef object.

Операторы

Explicit(HandleRef to IntPtr) Explicit(HandleRef to IntPtr) Explicit(HandleRef to IntPtr) Explicit(HandleRef to IntPtr)

Возвращает дескриптор для ресурса указанного объекта HandleRef.Returns the handle to a resource of the specified HandleRef object.

Применяется к

Дополнительно