Sobre hilos:por favor, que significa este error?

02/02/2004 - 00:54 por Carla | Informe spam
"Los controles creados en un subproceso no pueden tener controles primarios
en un control en un subproceso diferente"
tengo una clase servidor que cuando le lleva un mensaje lanza un evento.esta
clase servidor dentro de si tiene varios hilos.la cosa es que funciona bien
y lanza el evento y el manejador de evento de la clase cliente tambien
funciona bien, pero cuando intento actualizar en este manejador un control
datagrid poniendo el datasource= a un array que consigo manejando la
respuesta del evento, me da el error de arriba.En cambio un cuadro de texto
que tengo si lo puedo actualizar sin problemas.
la clase cliente no tiene ningun hilo
que puede ser?

gracias y un saludo

Preguntas similare

Leer las respuestas

#6 Carla
03/02/2004 - 11:45 | Informe spam
Hola leonardo
Es que no actualizo ningun control desde la clase
servidora.desde la clase servidor simplmente lanzo un
evento que recoje la clase cliente y es ESTA la que
actualiza los controles.Pero parece como si el manejo del
evento se ejecutara en el mismo hilo que lanzo el
evento.Es por eso que me da el error de arriba

Que podria ser?
Hola Carla,

Desde una clase servidora no puedes actualizar los


controles de la parte de
presentación. Te sugiero que trabajes desde el método


que recibe el
parámetro IAsyncResult el objeto MethodInvoker que te


permitiría hacer una
retrollamada al metodo que inició la secuencia con


BeginInvoke. O tal vez te
sirva el patrón observador para este tipo de


actualizaciones. Te sugiero la
siguiente dirección:

http://msdn.microsoft.com/practices...ns/Enterpr


ise/DesObserver/

Atentamente,

Leonardo Moreno Forero
MCP - MCSD
Bogotá - Colombia

"Carla" escribió en el mensaje
news:%
Eso es lo que deberia pasar, pero no se porque no es




asi.Tengo el servidor
en un proyecto separado.Pero, ademas del error, parece




como si los dos
proyectos se ejecutaran en el mismo espacio,me explico
cuando en el servidor disparo un evento y lo trato por




un manejador de la
clase cliente, si este ultimo dispara una excepcion,




esta es atrapada por
el
metodo que disparo el evento en la clase servidor.

que es lo que estoy haciendo mal?
Gracias y un saludo



"Juan C. Olivares" escribió en




el mensaje
news:
> Si tienes tu aplicación separada en capas, no




deberías tener problemas
> en hacer que el mismo proceso (cliente) trabajara




todo lo relacionado
con
> la interfaz del usuario.
>
> El servidor se debe limitar a enviar y recibir




información, sin
> involucrarse en la forma en la cual estos datos son




presentados en
> pantalla.
>
> Atte,
> Juan C. Olivares
>
>
> On Mon, 02 Feb 2004 02:42:33 -0800, Carla wrote:
>
> > gracias por contestar
> > entiendo lo que me dices y tendre que hacerlo asi,




pero
> > estoy haciendo una clase que sera logicamente




usada por
> > clases clientes.La clase cliente tendra que hacer
> > esto,usar beginInvoke siempre?
> > es que entonces no se, tendria que indicarlo de




alguna
> > manera o algo, no parece muy elegante.
> > no hay alguna manera en la propia clase servidora




de
> > tratar los hilos para que esto no lo tenga que




hacer en
> > el cliente?
> > Te agradezco mucho la ayuda
> >
> > Un saludo
> >>Lo que te está ocurriendo es que los controles en
> > pantalla de un Windows
> >>Form no soportan funcionamiento en multihilo, y sus
> > propiedades siempre
> >>tienen que ser invocadas desde el hilo que los




creó.
> > Para esto tienen la
> >>función BeginInvoke, que sí que se puede llamar




desde
> > otro hilo, y que
> >>permite transferir la información de un hilo a




otro.
> > Busca en el manual
> >>"BeginInvoke" y encontrarás un ejemplo de cómo se




usa.
> >>
> >>From: "Carla"
> >>Newsgroups: microsoft.public.es.csharp
> >>Sent: Monday, February 02, 2004 12:54 AM
> >>Subject: Sobre hilos:por favor, que significa este




error?
> >>
> >>
> >>> "Los controles creados en un subproceso no pueden
> > tener controles
> >>primarios
> >>> en un control en un subproceso diferente"
> >>> tengo una clase servidor que cuando le lleva un
> > mensaje lanza un
> >>evento.esta
> >>> clase servidor dentro de si tiene varios




hilos.la cosa
> > es que funciona
> >>bien
> >>> y lanza el evento y el manejador de evento de la




clase
> > cliente tambien
> >>> funciona bien, pero cuando intento actualizar en




este
> > manejador un control
> >>> datagrid poniendo el datasource= a un array que
> > consigo manejando la
> >>> respuesta del evento, me da el error de arriba.En
> > cambio un cuadro de
> >>texto
> >>> que tengo si lo puedo actualizar sin problemas.
> >>> la clase cliente no tiene ningun hilo
> >>> que puede ser?
> >>
> >>
> >>.
> >>
>






.

Respuesta Responder a este mensaje
#7 Leonardo Moreno Forero
03/02/2004 - 12:51 | Informe spam
Hola Carla,

No importa cual es la clase que actualiza los controles, la clase servidora
llama a la clase cliente y en este momento ambas deberían estar en el mismo
hilo, a menos que la clase servidora haga un callback a la clase cliente. Es
por esto que te marca el error. Intenta con la clase MethodInvoker hacer un
callback de la clase servidora a la clase cliente.

"Carla" escribió en el mensaje
news:8ba401c3ea42$e40b41f0$
Hola leonardo
Es que no actualizo ningun control desde la clase
servidora.desde la clase servidor simplmente lanzo un
evento que recoje la clase cliente y es ESTA la que
actualiza los controles.Pero parece como si el manejo del
evento se ejecutara en el mismo hilo que lanzo el
evento.Es por eso que me da el error de arriba

Que podria ser?
Hola Carla,

Desde una clase servidora no puedes actualizar los


controles de la parte de
presentación. Te sugiero que trabajes desde el método


que recibe el
parámetro IAsyncResult el objeto MethodInvoker que te


permitiría hacer una
retrollamada al metodo que inició la secuencia con


BeginInvoke. O tal vez te
sirva el patrón observador para este tipo de


actualizaciones. Te sugiero la
siguiente dirección:

http://msdn.microsoft.com/practices...ns/Enterpr


ise/DesObserver/

Atentamente,

Leonardo Moreno Forero
MCP - MCSD
Bogotá - Colombia

"Carla" escribió en el mensaje
news:%
Eso es lo que deberia pasar, pero no se porque no es




asi.Tengo el servidor
en un proyecto separado.Pero, ademas del error, parece




como si los dos
proyectos se ejecutaran en el mismo espacio,me explico
cuando en el servidor disparo un evento y lo trato por




un manejador de la
clase cliente, si este ultimo dispara una excepcion,




esta es atrapada por
el
metodo que disparo el evento en la clase servidor.

que es lo que estoy haciendo mal?
Gracias y un saludo



"Juan C. Olivares" escribió en




el mensaje
news:
> Si tienes tu aplicación separada en capas, no




deberías tener problemas
> en hacer que el mismo proceso (cliente) trabajara




todo lo relacionado
con
> la interfaz del usuario.
>
> El servidor se debe limitar a enviar y recibir




información, sin
> involucrarse en la forma en la cual estos datos son




presentados en
> pantalla.
>
> Atte,
> Juan C. Olivares
>
>
> On Mon, 02 Feb 2004 02:42:33 -0800, Carla wrote:
>
> > gracias por contestar
> > entiendo lo que me dices y tendre que hacerlo asi,




pero
> > estoy haciendo una clase que sera logicamente




usada por
> > clases clientes.La clase cliente tendra que hacer
> > esto,usar beginInvoke siempre?
> > es que entonces no se, tendria que indicarlo de




alguna
> > manera o algo, no parece muy elegante.
> > no hay alguna manera en la propia clase servidora




de
> > tratar los hilos para que esto no lo tenga que




hacer en
> > el cliente?
> > Te agradezco mucho la ayuda
> >
> > Un saludo
> >>Lo que te está ocurriendo es que los controles en
> > pantalla de un Windows
> >>Form no soportan funcionamiento en multihilo, y sus
> > propiedades siempre
> >>tienen que ser invocadas desde el hilo que los




creó.
> > Para esto tienen la
> >>función BeginInvoke, que sí que se puede llamar




desde
> > otro hilo, y que
> >>permite transferir la información de un hilo a




otro.
> > Busca en el manual
> >>"BeginInvoke" y encontrarás un ejemplo de cómo se




usa.
> >>
> >>From: "Carla"
> >>Newsgroups: microsoft.public.es.csharp
> >>Sent: Monday, February 02, 2004 12:54 AM
> >>Subject: Sobre hilos:por favor, que significa este




error?
> >>
> >>
> >>> "Los controles creados en un subproceso no pueden
> > tener controles
> >>primarios
> >>> en un control en un subproceso diferente"
> >>> tengo una clase servidor que cuando le lleva un
> > mensaje lanza un
> >>evento.esta
> >>> clase servidor dentro de si tiene varios




hilos.la cosa
> > es que funciona
> >>bien
> >>> y lanza el evento y el manejador de evento de la




clase
> > cliente tambien
> >>> funciona bien, pero cuando intento actualizar en




este
> > manejador un control
> >>> datagrid poniendo el datasource= a un array que
> > consigo manejando la
> >>> respuesta del evento, me da el error de arriba.En
> > cambio un cuadro de
> >>texto
> >>> que tengo si lo puedo actualizar sin problemas.
> >>> la clase cliente no tiene ningun hilo
> >>> que puede ser?
> >>
> >>
> >>.
> >>
>






.

Respuesta Responder a este mensaje
#8 Juan C. Olivares
03/02/2004 - 16:21 | Informe spam
Lo que sucede en ese caso es que, a través de Remoting, el servidor
utiliza el método asociado al evento, llamándolo en su propio thread
(Remoting tiene un thread adicional). Es por esto que no debes actualizar
controles desde un método llamado por remoting desde otra máquina.

Por ejemplo, si usabas este método para el evento Click:

private void Clickeado (object sender, EventArgs e)
{
Button boton = new Button ();

}

debes llamarlo a través de un Invoke:

private void Clickeado ()
{
this.Invoke (Clickeado, new object[] {sender, e});
}

private void LlamarClickeado (object sender, EventArgs e)
{
this.Invoke (Clickeado, new object[] {sender, e});
}

algo así (creo que en el segundo método, clickeado debe ir como
un delegado... por favor, verifica la documentación).

Atte,
Juan C. Olivares

On Mon, 02 Feb 2004 22:48:28 +0100, Carla wrote:

Eso es lo que deberia pasar, pero no se porque no es asi.Tengo el servidor
en un proyecto separado.Pero, ademas del error, parece como si los dos
proyectos se ejecutaran en el mismo espacio,me explico
cuando en el servidor disparo un evento y lo trato por un manejador de la
clase cliente, si este ultimo dispara una excepcion, esta es atrapada por el
metodo que disparo el evento en la clase servidor.

que es lo que estoy haciendo mal?
Gracias y un saludo



"Juan C. Olivares" escribió en el mensaje
news:
Si tienes tu aplicación separada en capas, no deberías tener problemas
en hacer que el mismo proceso (cliente) trabajara todo lo relacionado con
la interfaz del usuario.

El servidor se debe limitar a enviar y recibir información, sin
involucrarse en la forma en la cual estos datos son presentados en
pantalla.

Atte,
Juan C. Olivares


On Mon, 02 Feb 2004 02:42:33 -0800, Carla wrote:

> gracias por contestar
> entiendo lo que me dices y tendre que hacerlo asi, pero
> estoy haciendo una clase que sera logicamente usada por
> clases clientes.La clase cliente tendra que hacer
> esto,usar beginInvoke siempre?
> es que entonces no se, tendria que indicarlo de alguna
> manera o algo, no parece muy elegante.
> no hay alguna manera en la propia clase servidora de
> tratar los hilos para que esto no lo tenga que hacer en
> el cliente?
> Te agradezco mucho la ayuda
>
> Un saludo
>>Lo que te está ocurriendo es que los controles en
> pantalla de un Windows
>>Form no soportan funcionamiento en multihilo, y sus
> propiedades siempre
>>tienen que ser invocadas desde el hilo que los creó.
> Para esto tienen la
>>función BeginInvoke, que sí que se puede llamar desde
> otro hilo, y que
>>permite transferir la información de un hilo a otro.
> Busca en el manual
>>"BeginInvoke" y encontrarás un ejemplo de cómo se usa.
>>
>>From: "Carla"
>>Newsgroups: microsoft.public.es.csharp
>>Sent: Monday, February 02, 2004 12:54 AM
>>Subject: Sobre hilos:por favor, que significa este error?
>>
>>
>>> "Los controles creados en un subproceso no pueden
> tener controles
>>primarios
>>> en un control en un subproceso diferente"
>>> tengo una clase servidor que cuando le lleva un
> mensaje lanza un
>>evento.esta
>>> clase servidor dentro de si tiene varios hilos.la cosa
> es que funciona
>>bien
>>> y lanza el evento y el manejador de evento de la clase
> cliente tambien
>>> funciona bien, pero cuando intento actualizar en este
> manejador un control
>>> datagrid poniendo el datasource= a un array que
> consigo manejando la
>>> respuesta del evento, me da el error de arriba.En
> cambio un cuadro de
>>texto
>>> que tengo si lo puedo actualizar sin problemas.
>>> la clase cliente no tiene ningun hilo
>>> que puede ser?
>>
>>
>>.
>>

Respuesta Responder a este mensaje
#9 Juan C. Olivares
04/02/2004 - 15:20 | Informe spam
Corrijo:

Por ejemplo, si usabas este método para el evento Click:

private void Clickeado (object sender, EventArgs e)
{
Button boton = new Button ();

}

debes llamarlo a través de un Invoke:

private void Clickeado (object sender, EventArgs e)
{
this.Invoke (Clickeado, new object[] {sender, e});
}

private void LlamarClickeado (object sender, EventArgs e)
{
Button boton = new Button ();

}


On Tue, 03 Feb 2004 12:21:21 -0300, Juan C. Olivares wrote:

Por ejemplo, si usabas este método para el evento Click:

private void Clickeado (object sender, EventArgs e)
{
Button boton = new Button ();

}

debes llamarlo a través de un Invoke:

private void Clickeado ()
{
this.Invoke (Clickeado, new object[] {sender, e});
}

private void LlamarClickeado (object sender, EventArgs e)
{
this.Invoke (Clickeado, new object[] {sender, e});
}
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida