2011-02-01 19 views
12

Siempre obtuve un DisconnectedContext (un asistente de depuración administrado) cuando ejecuto mi aplicación usando Visual Studio. Dado Google y documentos, esto puede suceder cuando se llaman objetos COM en STA desde otro hilo.Resolver DisconnectedContext en Visual Studio

Sin embargo, cuando miro a través de todos los hilos cuando aparece la ventana emergente, no encuentro nada como esto. (Y no encuentro nada extraño en absoluto).

Algunas ideas sobre cómo puedo encontrar la forma en que se plantea DisconnectedContext?

Respuesta

2

Esta es una advertencia bastante seria, no la ignore. El escenario es que creó un objeto COM en un hilo y ese hilo salió. Pero sigues usando ese objeto. COM se encarga de los objetos que anuncian que no son seguros para subprocesos (también conocido como apartamento enhebrado), clasifica automáticamente cualquier llamada en ese objeto al subproceso que lo creó. Eso no puede funcionar cuando ese hilo ya no está alrededor.

Ignorar la advertencia puede ocasionalmente ocasionar problemas en la resolución de errores de carrera. Cosas que sutilmente mal solo una vez a la semana. Revise su código, preste atención a cómo se creó el objeto sobre el que se queja.

+2

No quiero ignorar la advertencia (eliminarla con CTRL + ALT + E haría el truco). El problema es que no sé dónde mirar ya que la aplicación es enorme y la advertencia no me dice por qué se está disparando. – Toto

+0

Bueno, traté de explicar * por qué * está desencadenando y dónde buscar la causa. Fail whale por el sonido de eso. Intenta obtener ayuda de las personas que trabajaron en este proyecto si no puedes resolverlo. –

9

encontrado esta en la búsqueda de la misma respuesta, que me gustaría añadir un comentario ...

Este error es prácticamente inevitable en cualquier aplicación multi-hilo usando objetos CLR a través de procesos de interoperabilidad (en las roscas transitorios) El problema es que el CLR tenía limpieza no determinista de objetos (que pueden ser RCW, con afinidad de hilos en los objetos COM subyacentes). No hay forma de que pueda decirle al tiempo de ejecución que limpie los objetos creados en un subproceso (al menos sin crear otro identificador de limpieza no determinista en el subproceso); es una limitación de diseño del mecanismo de interoperabilidad. Teniendo en cuenta eso, no hay forma de salir de manera segura de un hilo que haya creado algún objeto CLR sin potencialmente obtener este error.

Mejor consejo: no use CLR/interoperabilidad si puede evitarlo. El siguiente mejor consejo: utilice COM + para aislar el proceso de su interoperabilidad, de modo que el CLR pueda vivir en un proceso que nunca finalice los subprocesos (use un grupo de subprocesos persistentes o equivalente). El siguiente mejor consejo: únete a mí para seguir contando a Microsoft sobre este problema de nivel de diseño con su interoperabilidad, y espero que lo solucionen.