Multithreading y excepcion en copy

24/08/2005 - 11:54 por Kano | Informe spam
Buenas.
Tengo una aplicación multitheading con un formulario MDI. El thread
principal esta puesto en modo MTA asi como todos lo threads de la
aplicación. El problema me surge al realizar una operación de copy en un
datagrid de un formulario mdi hijo de la aplicación que corre sobre un
thread no principal. Me da la siguiente excepción
"System.Threading.ThreadStateException: El subproceso actual debe estar
establecido en el modo de subprocesamiento controlado simple (Single
Thread Apartment, STA) para poder realizar llamadas OLE. Asegúrese de
que la función Main tiene marcado STAThreadAttribute."

Explico mejor la situación. El formulario mdi padre funciona sobre el
thread principal. Este formulario lanza un mdi child q funciona sobre un
thread secundario. Ambos en modo MTA. Cuando selecciono un registro de
un datagrid del formulario hijo se da la excepción, pero cuando realizo
la operacion de copia en cualquier otro lugar q no sea un datagrid
funciona correctamente.

Alguna sugerencia??
Gracias!!
Kano
 

Leer las respuestas

#1 Bela Istok
31/08/2005 - 18:34 | Informe spam
Si el problema es que la copia en el datagrid, hace una llamada OLE, y esta
solo esta permitido en el modelo STA no MTA y por eso te falla, a mi me paso
lo mismo cuando intente acceder el Portapapeles en una aplicación MTA, lo
unico que pude hacer es cambiarla a STA. Aunque si mal no recuerdo hay una
manera de cambiar un hilo especifico para que funcione STA, pero no se como
hacerlo.


Saludos,

Bela Istok

"Kano" wrote in message
news:%
Buenas.
Tengo una aplicación multitheading con un formulario MDI. El thread
principal esta puesto en modo MTA asi como todos lo threads de la
aplicación. El problema me surge al realizar una operación de copy en un
datagrid de un formulario mdi hijo de la aplicación que corre sobre un
thread no principal. Me da la siguiente excepción
"System.Threading.ThreadStateException: El subproceso actual debe estar
establecido en el modo de subprocesamiento controlado simple (Single
Thread Apartment, STA) para poder realizar llamadas OLE. Asegúrese de que
la función Main tiene marcado STAThreadAttribute."

Explico mejor la situación. El formulario mdi padre funciona sobre el
thread principal. Este formulario lanza un mdi child q funciona sobre un
thread secundario. Ambos en modo MTA. Cuando selecciono un registro de un
datagrid del formulario hijo se da la excepción, pero cuando realizo la
operacion de copia en cualquier otro lugar q no sea un datagrid funciona
correctamente.

Alguna sugerencia??
Gracias!!
Kano

Preguntas similares