HandleRef Struct

Definizione

Esegue il wrapping di un oggetto gestito che contiene un handle a una risorsa passata al codice non gestito tramite platform invoke.

public value class HandleRef
public struct HandleRef
[System.Runtime.InteropServices.ComVisible(true)]
public struct HandleRef
public readonly struct HandleRef
type HandleRef = struct
[<System.Runtime.InteropServices.ComVisible(true)>]
type HandleRef = struct
Public Structure HandleRef
Ereditarietà
HandleRef
Attributi

Commenti

Importante

La funzionalità della HandleRef classe è stata sostituita dalla SafeHandle classe e dalle relative classi derivate, nonché dalla CriticalHandle classe .

Se si usa platform invoke per chiamare un oggetto gestito e l'oggetto non viene fatto riferimento altrove dopo la chiamata platform invoke, è possibile che il Garbage Collector finalizzi l'oggetto gestito. Questa azione rilascia la risorsa e invalida l'handle, causando l'esito negativo della chiamata platform invoke. Il wrapping di un handle garantisce HandleRef che l'oggetto gestito non venga sottoposto a Garbage Collection fino al completamento della chiamata platform invoke. Per una descrizione dei servizi platform invoke, vedere Utilizzo di funzioni DLL non gestite.

Il HandleRef tipo di valore, ad esempio GCHandle, è un tipo speciale riconosciuto dal gestore di marshalling di interoperabilità. Un'operazione normale non bloccata GCHandle impedisce anche un'operazione di Garbage Collection senza tempo, ma HandleRef offre prestazioni migliori. Sebbene sia preferibile usare HandleRef per mantenere attivo un oggetto per la durata di una chiamata platform invoke, è anche possibile usare il GC.KeepAlive metodo per lo stesso scopo.

Il HandleRef costruttore accetta due parametri: un oggetto Object che rappresenta il wrapper e un oggetto IntPtr che rappresenta l'handle non gestito. Il gestore di marshalling di interoperabilità passa solo l'handle al codice non gestito e garantisce che il wrapper (passato come primo parametro al costruttore di HandleRef) rimanga attivo per la durata della chiamata.

Costruttori

Nome Descrizione
HandleRef(Object, IntPtr)

Inizializza una nuova istanza della HandleRef classe con l'oggetto per eseguire il wrapping e un handle per la risorsa utilizzata dal codice non gestito.

Proprietà

Nome Descrizione
Handle

Ottiene l'handle di una risorsa.

Wrapper

Ottiene l'oggetto che contiene l'handle in una risorsa.

Metodi

Nome Descrizione
ToIntPtr(HandleRef)

Restituisce la rappresentazione intera interna di un HandleRef oggetto .

Operatori

Nome Descrizione
Explicit(HandleRef to IntPtr)

Restituisce l'handle a una risorsa dell'oggetto specificato HandleRef .

Si applica a

Vedi anche