HandleRef Struct
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
- 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 . |