HandleRef 结构
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将包含句柄的托管对象包装到通过平台调用传递到非托管代码的资源中。
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
- 继承
- 属性
重要
从 .NET Framework 2.0 开始,类的功能 HandleRef 已替换为 SafeHandle 类及其派生类以及 CriticalHandle 类。
如果使用平台调用来调用托管对象,并且该对象在平台调用调用后未在其他地方被引用,则垃圾回收器有可能完成托管对象。 此操作释放资源并使句柄失效,从而导致平台调用调用失败。 包装句柄可以 HandleRef 保证在平台调用调用完成之前不会对托管对象进行垃圾回收。 有关平台调用服务的说明,请参阅 使用非托管 DLL 函数。
值 HandleRef 类型(如 GCHandle)是互操作封送处理器识别的特殊类型。 正常的非固定 GCHandle 也会阻止不及时的垃圾回收,同时 HandleRef 提供更好的性能。 尽管最好使用 HandleRef 在平台调用调用期间使对象保持活动状态,但也可以将 GC.KeepAlive 方法用于相同的目的。
构造 HandleRef 函数采用两个参数:一个 Object 表示包装器,一个 IntPtr 表示非托管句柄。 互操作封送处理器仅将句柄传递给非托管代码,并保证作为第一 (个参数传递给) 构造函数的 HandleRef
包装器在调用期间保持活动状态。
Handle |
用要包装的对象和由非托管代码使用的资源的句柄初始化 HandleRef 类的新实例。 |
To |
返回 HandleRef 对象的内部整数表示形式。 |
Explicit(Handle |
返回指定的 HandleRef 对象的资源的句柄。 |
产品 | 版本 |
---|---|
.NET | Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10 |
.NET Framework | 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
.NET Standard | 2.0, 2.1 |