HandleRef Estrutura
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Envolve um objeto gerido que contém um handle a um recurso que é passado para código não gerido usando 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
- Herança
- Atributos
Observações
Importante
A funcionalidade da HandleRef classe foi substituída pela SafeHandle classe e pelas suas classes derivadas, bem como pela CriticalHandle própria classe.
Se usar o platform invoke para chamar um objeto gerido, e o objeto não for referenciado noutro local após a chamada de invoke da plataforma, é possível que o coletor de lixo finalize o objeto gerido. Esta ação liberta o recurso e invalida o handle, fazendo com que a chamada de invocação da plataforma falhe. Envolver um handle com HandleRef garante que o objeto gerido não é recolhido de lixo até que a chamada de invocação da plataforma seja concluída. Para uma descrição dos serviços de invocação de plataforma, veja Consuming Unmanaged DLL Functions.
O HandleRef tipo de valor, tal como GCHandle, é um tipo especial reconhecido pelo marshaler de interoperabilidade. Um normal, sem fixes GCHandle , também impede a recolha de lixo inoportuna, mas HandleRef oferece melhor desempenho. Embora seja preferido usar HandleRef para manter um objeto vivo durante a duração de uma chamada de invocação na plataforma, também pode usar o GC.KeepAlive método para o mesmo propósito.
O HandleRef construtor assume dois parâmetros: um Object que representa o wrapper, e um IntPtr que representa o handle não gerido. O interop marshaler passa apenas o handle para código não gerido e garante que o wrapper (passado como primeiro parâmetro ao construtor do HandleRef) permanece ativo durante toda a duração da chamada.
Construtores
| Name | Description |
|---|---|
| HandleRef(Object, IntPtr) |
Inicializa uma nova instância da HandleRef classe com o objeto a envolver e um handle para o recurso usado pelo código não gerido. |
Propriedades
| Name | Description |
|---|---|
| Handle |
Dá acesso a um recurso. |
| Wrapper |
Faz com que o objeto que segura a pega seja um recurso. |
Métodos
| Name | Description |
|---|---|
| ToIntPtr(HandleRef) |
Devolve a representação inteira interna de um HandleRef objeto. |
Operadores
| Name | Description |
|---|---|
| Explicit(HandleRef to IntPtr) |
Devolve o handle a um recurso do objeto especificado HandleRef . |