HandleRef 結構
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將保有控制代碼的 Managed 物件包裝至要使用平台叫用傳遞至 Unmanaged 程式碼的資源。
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 類別取代。
如果您使用平臺調用來呼叫 Managed 物件,而且對象在平台調用呼叫之後不會在其他地方參考,則垃圾收集行程可以完成 Managed 物件。 此動作會釋放資源並使句柄失效,導致平台調用呼叫失敗。 包裝句柄, HandleRef 保證在平台調用呼叫完成之前,不會垃圾收集Managed物件。 如需平台調用服務的描述,請參閱 取用非受控 DLL 函式。
實 HandleRef 值類型,例如 GCHandle,是 Interop 封送處理器所辨識的特殊類型。 一般的非固定 GCHandle 也會防止不及時的垃圾收集,但 HandleRef 可提供更佳的效能。 雖然最好在平台調用呼叫期間使用 HandleRef 讓物件保持運作,但您也可以使用相同的 GC.KeepAlive 方法。
建 HandleRef 構函式接受兩個 Object 參數:代表包裝函式的 ,以及 IntPtr 表示 Unmanaged 句柄的 。 Interop 封送處理器只會將句柄傳遞至 Unmanaged 程式代碼,並保證包裝函式 (當做第一個參數傳遞至) 的建構 HandleRef
函式在呼叫期間保持運作。
Handle |
使用要包裝的物件和 Unmanaged 程式碼所使用的資源控制代碼,初始化 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 |
.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 |