disconnectedContext MDA

disconnectedContext Asystent zarządzanego debugowania (MDA) jest aktywowany, gdy clR próbuje przejść do odłączonego mieszkania lub kontekstu podczas obsługi żądania dotyczącego obiektu COM.

Objawy

Wywołania wykonywane na otoce wywoływanej w czasie wykonywania (RCW) są dostarczane do bazowego składnika COM w bieżącym mieszkaniu lub kontekście zamiast do tego, w którym istnieją. Może to spowodować uszkodzenie i utratę danych, jeśli składnik COM nie jest wielowątkowy, jak w przypadku składników apartamentów jednowątkowych (STA). Alternatywnie, jeśli RCW jest serwerem proxy, wywołanie może spowodować wyrzucenie obiektu COMException z HRESULT RPC_E_WRONG_THREAD.

Przyczyna

Mieszkanie LUB kontekst OLE został zamknięty, gdy CLR próbuje przejść do niego. Jest to najczęściej spowodowane tym, że mieszkania STA są zamykane, zanim wszystkie składniki COM należące do mieszkania zostały całkowicie zwolnione. Może to wystąpić w wyniku jawnego wywołania z kodu użytkownika na RCW lub gdy sam CLR manipuluje składnikiem COM, na przykład gdy CLR zwalnia składnik COM, gdy skojarzony RCW został odśmiecany.

Rozwiązanie

Aby uniknąć tego problemu, upewnij się, że wątek, który jest właścicielem sta, nie kończy się przed zakończeniem aplikacji ze wszystkimi obiektami, które mieszkają w mieszkaniu. To samo dotyczy kontekstów; upewnij się, że konteksty nie są zamykane przed całkowitym zakończeniem działania aplikacji przy użyciu składników COM, które znajdują się w kontekście.

Wpływ na środowisko uruchomieniowe

To MDA nie ma wpływu na CLR. Raportuje tylko dane dotyczące rozłączonego kontekstu.

Dane wyjściowe

Raportuje plik cookie kontekstu odłączonego mieszkania lub kontekstu.

Konfigurowanie

<mdaConfig>  
  <assistants>  
    <disconnectedContext />  
  </assistants>  
</mdaConfig>  

Zobacz też