Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Note
Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .NET 6 y versiones posteriores.
El contextSwitchDeadlock asistente de depuración administrada (MDA) se activa cuando se detecta un interbloqueo durante una transición de contexto COM intentada.
Síntomas
El síntoma más común es que una llamada en un componente COM no administrado desde código administrado no devuelve. Otro síntoma es que el uso de memoria aumenta con el tiempo.
Causa
La causa más probable es que un subproceso de apartamento uniproceso (STA) no esté bombeando mensajes. El subproceso STA está esperando sin enviar mensajes o está realizando operaciones largas y no permite que la cola de mensajes se bombea.
El uso de memoria aumenta con el tiempo se debe a que el subproceso finalizador intenta llamar Release a en un componente COM no administrado y ese componente no vuelve. Esto impide que el finalizador recupere otros objetos.
De forma predeterminada, el modelo de subprocesos para el subproceso principal de las aplicaciones de consola de Visual Basic es STA. Este MDA se activa si un subproceso STA usa la interoperabilidad COM directa o indirectamente a través de Common Language Runtime o de un control de terceros. Para evitar activar este MDA en una aplicación de consola de Visual Basic, aplique el MTAThreadAttribute atributo al método principal o modifique la aplicación para bombear mensajes.
Es posible que este MDA se active falsamente cuando se cumplan todas las condiciones siguientes:
Una aplicación crea componentes COM a partir de subprocesos STA directa o indirectamente a través de bibliotecas.
La aplicación se detuvo en el depurador y el usuario continuó la aplicación o realizó una operación de paso.
La depuración no administrada no está habilitada.
Para determinar si el MDA se activa de forma falsa, deshabilite todos los puntos de interrupción, reinicie la aplicación y permita que se ejecute sin detener. Si el MDA no está activado, es probable que la activación inicial sea falsa. En este caso, deshabilite el MDA para evitar la interferencia con la sesión de depuración.
Note
Este MDA está en el conjunto predeterminado para Visual Studio. Para obtener información sobre cómo deshabilitar las MDA, consulte Diagnóstico de errores con asistentes de depuración administrada.
Resolución
Siga las reglas COM relativas al bombeo de mensajes STA.
Efecto en el tiempo de ejecución
Este MDA no tiene ningún efecto en clR. Solo notifica datos sobre contextos COM.
Output
Mensaje que describe el contexto actual y el contexto de destino.
Configuration
<mdaConfig>
<assistants>
<contextSwitchDeadlock />
</assistants>
</mdaConfig>