tengo una clase en c# (.net 3.5 cp, vs2010) que se ejecuta complejo comuptations que habitualmente llevan mucho tiempo. Después de un minuto no se lanza una excepción, que ContextSwitchDeadlock fue detectado. La excepción es localizado, a mi no idioma inglés por lo que no puedo copiar y pegar, pero el significado es el siguiente:

Módulo CLR no podía transición desde el contexto de la COM … el contexto a la COM … durante 60 segundos. Subproces de la que posee el contexto meta/apartamento está probablemente haciendo una no-bombeo de espera o el procesamiento de una muy larga ejecución de la operación sin necesidad de bombeo del sistema de Windows mensajes.

Básicamente, parece que mi solicitud es la informática y no responde a windows por un largo tiempo y visual studio se cierra y los informes de problable interbloqueo.

Yo estaba tratando de hacer un poco de investigación y encontrar dos soluciones:

  1. Desactivar alguna opción en visual studio debbuger para detectar los interbloqueos. Qué no funciona para mí porque woirks sólo para propósitos de depuración.

  2. Llamar a algunos DoEvents método, pero era para windows forms y no WPF y estoy usando WPF.

También hubo sugerencia para crear un subproceso independiente, pero soy nueva y completa de roscar y que no sé qué debo hacer. Alguna sugerencia por favor?

InformationsquelleAutor | 2011-11-12

1 Comentario

  1. 40

    Es sólo una advertencia de que una gestión de Ayudante de Depuración (MDA). Su código está violando un muy difícil requisito para un Solo Apartamento de Subproceso (STA) de los hilos, no se le permite bloquear durante largos períodos. La advertencia es bastante real, bloquea el subproceso de interfaz de usuario fácilmente puede causar un interbloqueo. Pero la explicación que en su caso es muy sencillo, apenas va catatónico debido a que está ocupado con el de la informática, no porque realmente bloqueado. El MDA no puede decir la diferencia.

    Puede desactivar la advertencia con la Depuración + Excepciones, abra la Depuración Administrada Asistentes nodo y desmarca la casilla ContextSwitchDeadlock.

    Que deja el usuario con una ventana en su escritorio que está muerto para el mundo, no es exactamente una gran experiencia de usuario. Y puede tener efectos secundarios, causando otros programas para dejar de responder cuando se envían mensajes a nivel superior de windows.

    Necesita utilizar el roscado para realmente solucionar este problema. Eche un vistazo a BackgroundWorker, está bien documentado en la Biblioteca de MSDN y muchos otros lugares.

    • Gracias, voy a tratar de backgroundworker.

Dejar respuesta

Please enter your comment!
Please enter your name here