Ahh...., las delicias de COM...

Esto ocurre cuando un componente COM es creado en un STA (single-threaded-apartment) y se invoca uno de sus métodos desde otro thread. Cuando esto sucede, el llamado se hace a través de un proxy, y esto involucra envíar mensajes a la cola de mensajes del thread. Si el thread no despacha mensajes, ya sea porque se encuentra bloqueado o procesando en un loop, entonces el método no puede ser invocado.

Imposible dar una respuesta sobre como solucionar esto sin mayores detalles pero en líneas generales deberías tratar de evitar que el componente COM sea creado en el mismo thread donde se realiza el 'procesamiento pesado'. Como alternativa, si estás procesando algo en un bucle, deberías permitir que se despachen mensajes, por ejemplo llamando a DoEvents a intervalos regulares. Para ilustrar con un ejemplo, si el procesamiento involucra procesar registros, entonces deberías llamar a DoEvents cada N registros, donde N dependerá de cuanto tiempo demora el procesamiento de un registro.

Saludos,

Fernando Tubio


----- Original Message ----- From: "Juan Manuel Moyano" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Thursday, March 22, 2007 11:38 AM
Subject: [puntonet] Error CLR consulta


Hola alguien sabe que mecanismo hay que implementar para solucionar un ContextSwithDeadLock? Estoy haciendo un testing de una aplicacion hecha en punto .net y el proceso a correr lleva mucho tiempo. Me sale el siguiente error:

The CLR has been unable to transtition from COM context 0x1a16a0 to COM context 0x1a1810 for 60 seconds. The thread that owns the destination context/apartemtn is most either doing a non pumping wait or processing a very long running operation without pumping windows message..







Responder a