HandleRef Struktur
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Umschließt ein verwaltetes Objekt, das ein Handle an eine Ressource hält, die mithilfe des Plattform-Aufrufs an nicht verwalteten Code übergeben wird.
public value class HandleRef
public readonly struct HandleRef
public struct HandleRef
[System.Runtime.InteropServices.ComVisible(true)]
public struct HandleRef
type HandleRef = struct
[<System.Runtime.InteropServices.ComVisible(true)>]
type HandleRef = struct
Public Structure HandleRef
- Vererbung
- Attribute
Hinweise
Important
Die Funktionalität der HandleRef Klasse wurde durch die SafeHandle Klasse und die abgeleiteten Klassen sowie durch die CriticalHandle Klasse ersetzt.
Wenn Sie den Plattformaufruf verwenden, um ein verwaltetes Objekt aufzurufen, und auf das Objekt nach dem Aufruf der Plattform nicht verwiesen wird, ist es möglich, dass der Garbage Collector das verwaltete Objekt abschließen kann. Mit dieser Aktion wird die Ressource freigegeben und der Handle ungültig, was dazu führt, dass der Aufruf der Plattform fehlschlägt. Umschließen eines Handles mit HandleRef Garantien, dass das verwaltete Objekt erst dann garbage collection wird, wenn der Aufruf der Plattform abgeschlossen ist. Eine Beschreibung der Plattform-Aufrufdienste finden Sie unter Verwenden nicht verwalteter DLL-Funktionen.
Der HandleRef Werttyp ist ein GCHandlespezieller Typ, der vom Interop marshaler erkannt wird. Eine normale, nicht angeheftete GCHandle Sammlung verhindert auch eine nicht rechtzeitige Garbage Collection, bietet jedoch HandleRef eine bessere Leistung. Obwohl die Verwendung HandleRef , um ein Objekt für die Dauer eines Plattformaufrufs aktiv zu halten, bevorzugt wird, können Sie die GC.KeepAlive Methode auch für denselben Zweck verwenden.
Der HandleRef Konstruktor verwendet zwei Parameter: einen Object , der den Wrapper darstellt, und ein IntPtr darstellungsloses Handle. Der Interop-Marshaler übergibt nur das Handle an nicht verwalteten Code und garantiert, dass der Wrapper (der als erster Parameter an den Konstruktor der HandleRef) für die Dauer des Aufrufs aktiv bleibt.
Konstruktoren
| Name | Beschreibung |
|---|---|
| HandleRef(Object, IntPtr) |
Initialisiert eine neue Instanz der HandleRef Klasse mit dem Objekt, das umbrochen werden soll, und ein Handle für die Ressource, die von nicht verwaltetem Code verwendet wird. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Handle |
Ruft das Handle für eine Ressource ab. |
| Wrapper |
Ruft das Objekt ab, das das Handle an eine Ressource hält. |
Methoden
| Name | Beschreibung |
|---|---|
| ToIntPtr(HandleRef) |
Gibt die interne ganzzahlige Darstellung eines HandleRef Objekts zurück. |
Operatoren
| Name | Beschreibung |
|---|---|
| Explicit(HandleRef to IntPtr) |
Gibt das Handle an eine Ressource des angegebenen HandleRef Objekts zurück. |