SubProcesos y controles

21/03/2005 - 11:32 por Mario | Informe spam
Hola gente, a ver si me podeis echar un cable.

En un formulario tengo un control, el cual muestra o no un recurso (bitmap)
dentro de si mismo.
A parte del control existe un boton que cuando es pulsado informa al control
de que muestre o no el recurso.
El formulario tambien tiene un evento de captura de teclas.

La cuestion es que si pulso el boton me muestra o me oculta el recurso
correctamente, pero cuando quiero hacer lo mismo con la pulsación de una
tecla me da una error en el control al intentar crear dicho recurso, que
dice:
"Los controles creados en un subproceso no pueden tener controles primarios
en un control en un subproceso diferente"

Alguien sabe por donde van los tiros??

Un saludo,
Mario
 

Leer las respuestas

#1 A.Poblacion
21/03/2005 - 11:45 | Informe spam
"Mario" <mcampo#nospam#@proytecsa.es> wrote in message
news:
Hola gente, a ver si me podeis echar un cable.

En un formulario tengo un control, el cual muestra o no un recurso


(bitmap)
dentro de si mismo.
A parte del control existe un boton que cuando es pulsado informa al


control
de que muestre o no el recurso.
El formulario tambien tiene un evento de captura de teclas.

La cuestion es que si pulso el boton me muestra o me oculta el recurso
correctamente, pero cuando quiero hacer lo mismo con la pulsación de una
tecla me da una error en el control al intentar crear dicho recurso, que
dice:
"Los controles creados en un subproceso no pueden tener controles


primarios
en un control en un subproceso diferente"



Este error sale cuando intentas manipular el contenido de la pantalla
desde un hilo distinto del que está procesando la pantalla, debido a que los
WinForms no son multihilo.
Si las pulsaciones de tecla las procesas en un evento KeyDown, por
ejemplo, no debería ocurrir ese error, porque el evento se procesa en el
mismo hilo del formulario. Pero si estás usando algún mecanismo más exótico,
tal como un "keyboard hook", pues efectivamente te pueden ocurrir cosas de
ese tipo.
El remedio, en este último caso, es "transportar" ("marshall") la
llamada desde el hilo que la recibe hasta el hilo del formulario, pasándole
un delegado al método Invoke del formulario. Este método es el único que se
garantiza que puede ser llamado desde otro hilo sin dar errores, y lo que
hace es encolar la llamada que le pasas y ejecutarla (a través del delegado
que le pasas) dentro del hilo del formulario.

Preguntas similares