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 zu einer Ressource enthält, die über einen Plattformaufruf 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
Wichtig
Ab .NET Framework 2.0 wurde die Funktionalität der HandleRef -Klasse durch die -Klasse und ihre SafeHandle abgeleiteten Klassen sowie durch die CriticalHandle -Klasse ersetzt.
Wenn Sie einen Plattformaufruf zum Aufrufen eines verwalteten Objekts verwenden und nach dem Plattformaufruf nicht an anderer Stelle auf das Objekt verwiesen wird, kann der Garbage Collector das verwaltete Objekt abschließen. Durch diese Aktion wird die Ressource freigegeben und das Handle ungültig, sodass der Plattformaufruf fehlschlägt. Das Umschließen eines Handles mit HandleRef garantiert, dass das verwaltete Objekt erst nach Abschluss des Aufrufs der Plattform gesammelt wird. Eine Beschreibung der Plattformaufrufdienste finden Sie unter Verwenden von nicht verwalteten DLL-Funktionen.
Der HandleRef Werttyp, wie GCHandle, ist ein spezieller Typ, der vom Interop-Marshaller erkannt wird. Ein normales, nicht angeheftetes System verhindert auch eine vorzeitige GCHandle Garbage Collection, bietet jedoch eine HandleRef bessere Leistung. Obwohl die Verwendung HandleRef von verwendet wird, um ein Objekt für die Dauer eines Plattformaufrufs am Leben zu halten, können Sie die GC.KeepAlive -Methode auch für denselben Zweck verwenden.
Der HandleRef Konstruktor akzeptiert zwei Parameter: einen Object , der den Wrapper darstellt, und ein , IntPtr das das nicht verwaltete Handle darstellt. Der Interop-Marshaller übergibt nur das Handle an nicht verwalteten Code und garantiert, dass der Wrapper (der als erster Parameter an den Konstruktor von HandleRef
übergeben wird) für die Dauer des Aufrufs aktiv bleibt.
Konstruktoren
HandleRef(Object, IntPtr) |
Initialisiert eine neue Instanz der HandleRef-Klasse mit dem zu umschließenden Objekt und einem Handle auf die Ressource, die von nicht verwaltetem Code verwendet wird. |
Eigenschaften
Handle |
Ruft das Handle für eine Ressource ab. |
Wrapper |
Ruft das Objekt ab, das das Handle für eine Ressource enthält. |
Methoden
ToIntPtr(HandleRef) |
Gibt die interne Ganzzahldarstellung eines HandleRef-Objekts zurück. |
Operatoren
Explicit(HandleRef to IntPtr) |
Gibt das Handle für eine Ressource des angegebenen HandleRef-Objekts zurück. |