disconnectedContext MDA
注意
本文專屬於 .NET Framework。 它不適用於較新的 .NET 實作,包括 .NET 6 和更新版本。
如果 CLR 在服務有關 COM 物件的要求時,試圖轉換至中斷連接的 Apartment 或內容,就會啟動 disconnectedContext
Managed 偵錯助理 (MDA)。
徵兆
在執行階段可呼叫包裝函式 (RCW) 上執行的呼叫會傳遞至目前 Apartment 或內容中的基礎 COM 元件,而不是其所在的 Apartment 或內容中。 如果 COM 元件不是多執行緒,這可能會導致損毀及/或資料遺失,就像在單一執行緒 Apartment (STA) 元件的案例一樣。 或者,如果 RCW 本身是 Proxy,則呼叫可能會導致擲回 COMException,且 HRESULT 為 RPC_E_WRONG_THREAD。
原因
當 CLR 試圖轉換至 OLE Apartment 或內容時,其已關閉。 最常見的原因,就是在 Apartment 擁有的所有 COM 元件都完成發行之前,STA Apartment 即已關閉。從 RCW 上的使用者程式碼進行明確呼叫,或是 CLR 本身在操作 COM 元件時,就可能會導致這種情況發生,例如當相關聯的 RCW 已進行記憶體回收,而 CLR 還在發行 COM 元件時。
解決方法
若要避免此問題,請確定在應用程式完成 Apartment 中留存的所有物件之前,擁有 STA 的執行緒不會終止。 對內容也是套用一樣的方式;請確定在應用程式完成內容中留存的任何 COM 元件之前,內容未關閉。
對執行階段的影響
此 MDA 對 CLR 沒有影響。 它只會提報中斷連接之內容的相關資料。
輸出
提報中斷連接的 Apartment 或內容的內容 Cookie。
組態
<mdaConfig>
<assistants>
<disconnectedContext />
</assistants>
</mdaConfig>