2010-02-08 8 views
5

que tengo un programa que me encuentro y en el medio me sale este mensaje:mensaje extraño en las discusiones en C#

Administrado Depuración Auxiliar 'ContextSwitchDeadlock' ha detectado un problema en 'C: \ Documents and Settings \ Lena G \ Mis documentos \ SchoolStuff \ IR Information \ Home Work \ FianlProject \ finalProject \ finalProject \ bin \ Debug \ finalProject.vshost.exe '. Información adicional: El CLR no ha podido pasar del contexto COM 0x3407968 al contexto COM 0x3407ad8 durante 60 segundos. El hilo que posee el contexto/apartamento de destino probablemente esté haciendo una espera de no bombeo o procesando una operación de muy larga ejecución sin bombear mensajes de Windows. Esta situación generalmente tiene un impacto negativo en el rendimiento e incluso puede llevar a que la aplicación no responda o el uso de la memoria se acumule continuamente a lo largo del tiempo. Para evitar este problema, todos los subprocesos de apartamento de rosca única (STA) deben usar primitivas de espera de bombeo (como CoWaitForMultipleHandles) y rutinariamente bombear mensajes durante operaciones de larga ejecución.

Entiendo que tiene algo que ver con el hecho de que funciona durante 60 segundos sin parar o algo así? ¿Cómo es un problema? También puse [STAThread] antes de la parte principal de mi programa porque si lo elimino, entonces me muestra este mensaje:

Se produjo una excepción no controlada del tipo 'System.Threading.ThreadStateException' en System.Windows.Forms.dll Información adicional: El hilo actual se debe establecer en el modo de apartamento de una sola rosca (STA) antes de poder hacer llamadas OLE. Asegúrese de que su función principal tenga marcado STAThreadAttribute. Esta excepción solo se plantea si se adjunta un depurador al proceso.

¿Alguien sabe cómo puedo resolver este problema?

Gracias de antemano,

Lena

Respuesta

1

Es una advertencia que se genera cuando realiza llamadas en un objeto ActiveX desde un hilo de fondo y su hilo principal está bloqueado. Quizás más probable: hubo un error en la versión comercial de Visual Studio 2005 que disparó esta advertencia sin una buena razón. Se arregló en el Service Pack 1, asegúrese de tenerlo instalado. Sin embargo, otra solución es callarlo. Depurar + Excepciones, asistentes de depuración gestionados, desmarcar la advertencia ContextSwitchDeadlock. Pero usa SP1 si no lo tienes.

+0

Si desactivo el bloqueo de contexto, ¿puede causar algún daño? Estoy usando Visual Studio 2008 .. –

+0

Nada va a explotar. En realidad, puede tener un punto muerto. Descubrirás lo suficientemente rápido, tu programa se congelará. –

2

Usted necesita asegurarse de que su subproceso que posee el componente COM no se está "bloqueado" a través de procesamiento de> 60 segundos.

Lo que probablemente está sucediendo es que tiene un objeto COM en un formulario y está trabajando en el hilo de la interfaz de usuario. Si su UI es bloqueada por el procesamiento por> 60 segundos, el componente COM puede quejarse.

Considere usar una instancia de BackgroundWorker para manejar su largo proceso de ejecución. Esto llevaría el trabajo a un hilo de fondo y permitiría que el componente COM procesara los mensajes sin quejas.

Cuestiones relacionadas