Acceso a controles desde hilos

29/03/2007 - 23:56 por Kapsule | Informe spam
Hola a todos.

Tengo una pregunta sobre algo que no entiendo de c#. Resulta que la versión
VS.2003 cuando creabas un hilo y desde este intentabas acceder a un control
Textbox, no había problemas. Sin embargo en la versión VS.2005 ya no es
posible porque sino genera una exception. Al parecer si no creas un delegado
para poder implementar el acceso a ese control, no funciona.

Otra opción es activar la propiedad CheckForIllegalCrossThreadCalls = false.
Con esta propiedad desactivamos ese comportamiento y podemos operar como
VS.2003. La verdad es que no se que utilizar, alguien me puede aconsejar? Hay
algun problema si utilizo la propiedad CheckForIllegalCrossThreadCalls en vez
de delegados?. Espero que no porque el estar creando delegados para cada una
de las opciones que quieres implementar, la verdad es que es un coñazo. Por
otro lado pienso que si han hecho este sistema de delegados es por algún
motivo, no?

Un saludo y gracias.

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
30/03/2007 - 00:00 | Informe spam
Hola,

Lo correcto cuando accedes a un control desde otro hilo es hacerlo mediante
Control.Invoke().
No he visto esa propiedad CheckForIllegalCrossThreadCalls, pero por el
nombre da la impresión de que simplemente suprime las comprobaciones,
lo cual no evitaría un "cuelgue" u otro fenómeno anormal en caso de
conflictos.

Slds - Octavio



"Kapsule" escribió en el mensaje
news:
Hola a todos.

Tengo una pregunta sobre algo que no entiendo de c#. Resulta que la
versión
VS.2003 cuando creabas un hilo y desde este intentabas acceder a un
control
Textbox, no había problemas. Sin embargo en la versión VS.2005 ya no es
posible porque sino genera una exception. Al parecer si no creas un
delegado
para poder implementar el acceso a ese control, no funciona.

Otra opción es activar la propiedad CheckForIllegalCrossThreadCalls =
false.
Con esta propiedad desactivamos ese comportamiento y podemos operar como
VS.2003. La verdad es que no se que utilizar, alguien me puede aconsejar?
Hay
algun problema si utilizo la propiedad CheckForIllegalCrossThreadCalls en
vez
de delegados?. Espero que no porque el estar creando delegados para cada
una
de las opciones que quieres implementar, la verdad es que es un coñazo.
Por
otro lado pienso que si han hecho este sistema de delegados es por algún
motivo, no?

Un saludo y gracias.
Respuesta Responder a este mensaje
#2 Alfredo Novoa
30/03/2007 - 00:40 | Informe spam
On Thu, 29 Mar 2007 14:56:01 -0700, Kapsule
wrote:

Hola a todos.

Tengo una pregunta sobre algo que no entiendo de c#. Resulta que la versión
VS.2003 cuando creabas un hilo y desde este intentabas acceder a un control
Textbox, no había problemas.



Si los había, pero tardabas en enterarte.

Sin embargo en la versión VS.2005 ya no es
posible porque sino genera una exception.



Para evitar esos problemas.

Otra opción es activar la propiedad CheckForIllegalCrossThreadCalls = false.
Con esta propiedad desactivamos ese comportamiento y podemos operar como
VS.2003.



Así eliminas una medida de seguridad y el programa podrá cascar en
cualquier momento.

La verdad es que no se que utilizar, alguien me puede aconsejar?



Usa Invoke.


Saludos
Respuesta Responder a este mensaje
#3 Juan Carlos Paramá
30/03/2007 - 19:28 | Informe spam
Hola,

Utiliza la palabra clave delegate para crear método anónimos y te
ahorraras la declaración de los delegados.

Saludos,

Juan Carlos Paramá


"Kapsule" escribió en el mensaje de
noticias news:
Hola a todos.

Tengo una pregunta sobre algo que no entiendo de c#. Resulta que la
versión
VS.2003 cuando creabas un hilo y desde este intentabas acceder a un
control
Textbox, no había problemas. Sin embargo en la versión VS.2005 ya no es
posible porque sino genera una exception. Al parecer si no creas un
delegado
para poder implementar el acceso a ese control, no funciona.

Otra opción es activar la propiedad CheckForIllegalCrossThreadCalls =
false.
Con esta propiedad desactivamos ese comportamiento y podemos operar como
VS.2003. La verdad es que no se que utilizar, alguien me puede aconsejar?
Hay
algun problema si utilizo la propiedad CheckForIllegalCrossThreadCalls en
vez
de delegados?. Espero que no porque el estar creando delegados para cada
una
de las opciones que quieres implementar, la verdad es que es un coñazo.
Por
otro lado pienso que si han hecho este sistema de delegados es por algún
motivo, no?

Un saludo y gracias.
Respuesta Responder a este mensaje
#4 Kapsule
01/04/2007 - 20:14 | Informe spam
Hola, me puedes decir como puedo usar un método anonimo para poder actualziar
un control label?

gracias.

"Juan Carlos Paramá" wrote:

Hola,

Utiliza la palabra clave delegate para crear método anónimos y te
ahorraras la declaración de los delegados.

Saludos,

Juan Carlos Paramá


"Kapsule" escribió en el mensaje de
noticias news:
> Hola a todos.
>
> Tengo una pregunta sobre algo que no entiendo de c#. Resulta que la
> versión
> VS.2003 cuando creabas un hilo y desde este intentabas acceder a un
> control
> Textbox, no había problemas. Sin embargo en la versión VS.2005 ya no es
> posible porque sino genera una exception. Al parecer si no creas un
> delegado
> para poder implementar el acceso a ese control, no funciona.
>
> Otra opción es activar la propiedad CheckForIllegalCrossThreadCalls =
> false.
> Con esta propiedad desactivamos ese comportamiento y podemos operar como
> VS.2003. La verdad es que no se que utilizar, alguien me puede aconsejar?
> Hay
> algun problema si utilizo la propiedad CheckForIllegalCrossThreadCalls en
> vez
> de delegados?. Espero que no porque el estar creando delegados para cada
> una
> de las opciones que quieres implementar, la verdad es que es un coñazo.
> Por
> otro lado pienso que si han hecho este sistema de delegados es por algún
> motivo, no?
>
> Un saludo y gracias.

Respuesta Responder a este mensaje
#5 Octavio Hernandez
01/04/2007 - 22:29 | Informe spam
Hola,

Puedes usar (suponiendo q 'lbl' es la etiqueta):

lbl.Invoke(

(MethodInvoker)

delegate {

lbl.Text = "lo que sea";

});



Por razones técnicas, hay que hacer la conversión explícita.



Slds - Octavio







"Kapsule" escribió en el mensaje
news:
Hola, me puedes decir como puedo usar un método anonimo para poder
actualziar
un control label?

gracias.

"Juan Carlos Paramá" wrote:

Hola,

Utiliza la palabra clave delegate para crear método anónimos y te
ahorraras la declaración de los delegados.

Saludos,

Juan Carlos Paramá


"Kapsule" escribió en el mensaje de
noticias news:
> Hola a todos.
>
> Tengo una pregunta sobre algo que no entiendo de c#. Resulta que la
> versión
> VS.2003 cuando creabas un hilo y desde este intentabas acceder a un
> control
> Textbox, no había problemas. Sin embargo en la versión VS.2005 ya no es
> posible porque sino genera una exception. Al parecer si no creas un
> delegado
> para poder implementar el acceso a ese control, no funciona.
>
> Otra opción es activar la propiedad CheckForIllegalCrossThreadCalls >> > false.
> Con esta propiedad desactivamos ese comportamiento y podemos operar
> como
> VS.2003. La verdad es que no se que utilizar, alguien me puede
> aconsejar?
> Hay
> algun problema si utilizo la propiedad CheckForIllegalCrossThreadCalls
> en
> vez
> de delegados?. Espero que no porque el estar creando delegados para
> cada
> una
> de las opciones que quieres implementar, la verdad es que es un coñazo.
> Por
> otro lado pienso que si han hecho este sistema de delegados es por
> algún
> motivo, no?
>
> Un saludo y gracias.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida