hilos y delegados

23/01/2005 - 20:41 por axxegfx | Informe spam
Pregunta de novato :
Estoy usando el siguiente código
Sub empezar()
Dim del As MyDelSub
Dim del2 As MyDelSub
Dim delAll As [Delegate]
del = New MyDelSub(AddressOf hilo1)
del2 = New MyDelSub(AddressOf hilo2)
delAll = MulticastDelegate.Combine(del, del2)
delAll.DynamicInvoke(Nothing)
End Sub

Y me gustaria lanzar los 2 delegados simultaneamente, ¿ Como lo hago ?

Preguntas similare

Leer las respuestas

#1 A.Poblacion
24/01/2005 - 10:26 | Informe spam
Para lanzar dos delegados simultaneamente tienes que usar programación en
multihilo. Para ello dispones de la clase System.Threading.Thread. Un
ejemplo:

Dim t As New Thread(New ThreadStart(AddressOf hilo1))
t.Start()
Dim t2 As New Thread(New ThreadStart(AddressOf hilo2))
t2.Start()


"axxegfx" wrote in message
news:
Pregunta de novato :
Estoy usando el siguiente código
Sub empezar()
Dim del As MyDelSub
Dim del2 As MyDelSub
Dim delAll As [Delegate]
del = New MyDelSub(AddressOf hilo1)
del2 = New MyDelSub(AddressOf hilo2)
delAll = MulticastDelegate.Combine(del, del2)
delAll.DynamicInvoke(Nothing)
End Sub

Y me gustaria lanzar los 2 delegados simultaneamente, ¿ Como lo hago ?
Respuesta Responder a este mensaje
#2 axxegfx
24/01/2005 - 13:23 | Informe spam
No me serviria de hecho la programación inicial estaba programa en multihilo,
pero
me bloqueaba el interfaz del aplicación form, además dentro de ese hilo hay
un bucle FOR-NEXT y dentro de este bucle quiero hacer que la variable se vea
en un textbox y con ME.textbox1.text=x obtengo un error de referencia
cruzada por eso había pasado a los delegados pues es el único que además no
me bloquea la interfaz.

Alguna sugerencia?????

"A.Poblacion" wrote:

Para lanzar dos delegados simultaneamente tienes que usar programación en
multihilo. Para ello dispones de la clase System.Threading.Thread. Un
ejemplo:

Dim t As New Thread(New ThreadStart(AddressOf hilo1))
t.Start()
Dim t2 As New Thread(New ThreadStart(AddressOf hilo2))
t2.Start()


"axxegfx" wrote in message
news:
> Pregunta de novato :
> Estoy usando el siguiente código
> Sub empezar()
> Dim del As MyDelSub
> Dim del2 As MyDelSub
> Dim delAll As [Delegate]
> del = New MyDelSub(AddressOf hilo1)
> del2 = New MyDelSub(AddressOf hilo2)
> delAll = MulticastDelegate.Combine(del, del2)
> delAll.DynamicInvoke(Nothing)
> End Sub
>
> Y me gustaria lanzar los 2 delegados simultaneamente, ¿ Como lo hago ?



Respuesta Responder a este mensaje
#3 Juan Pedro Gonzalez
24/01/2005 - 20:05 | Informe spam
Hola,

No entiendo como se podia bloquear el interfaz de la aplicacion si estabas
empleando multihilo. Posiblemente tendrias algo mal en el codigo del
formulario de la aplicacion como un While esperando a que terminase el hilo
o algo asi, porque de hecho es lo ideal para lanzar procesos largos sin
bloquear la aplicacion, ya que el Application.DoEvents tarda en liberar los
recursos, y dentro de un bucle empieza a consumir recursos a lo bestia.

Si la funcion del hilo y el textbox estan en la misma clase debería dejarte
definir el texto del TextBox sin problemas, sino tambien puedes definir el
hilo dentro de una clase y diparar un evento cada cierto tiempo, y recoger
dicho evento en el formulario principal para rellenar el TextBox sin
problemas.

Si tu formulario debe reaccionar al final del hilo evita meter bucles
despues de iniarlos, simplemente ponlos en una clase independiente y que
disparen un evento al completarse, de esta forma puedes "bloquear" o
"desbloquear" el formulario cuando terminen... y no me refiero a dejarlo
colgado sino a habilitar un boton, TextBox o lo que sea cuando finalicen, o
que simplemente cierren el dialogo que sea, etc.

Saludos

P.D. - Si envias el codigo de como iniciabas los hilos anteriormente igual
podria servir de ayuda.



"axxegfx" escribió en el mensaje
news:
No me serviria de hecho la programación inicial estaba programa en


multihilo,
pero
me bloqueaba el interfaz del aplicación form, además dentro de ese hilo


hay
un bucle FOR-NEXT y dentro de este bucle quiero hacer que la variable se


vea
en un textbox y con ME.textbox1.text=x obtengo un error de referencia
cruzada por eso había pasado a los delegados pues es el único que además


no
me bloquea la interfaz.

Alguna sugerencia?????

"A.Poblacion" wrote:

> Para lanzar dos delegados simultaneamente tienes que usar programación


en
> multihilo. Para ello dispones de la clase System.Threading.Thread. Un
> ejemplo:
>
> Dim t As New Thread(New ThreadStart(AddressOf hilo1))
> t.Start()
> Dim t2 As New Thread(New ThreadStart(AddressOf hilo2))
> t2.Start()
>
>
> "axxegfx" wrote in message
> news:
> > Pregunta de novato :
> > Estoy usando el siguiente código
> > Sub empezar()
> > Dim del As MyDelSub
> > Dim del2 As MyDelSub
> > Dim delAll As [Delegate]
> > del = New MyDelSub(AddressOf hilo1)
> > del2 = New MyDelSub(AddressOf hilo2)
> > delAll = MulticastDelegate.Combine(del, del2)
> > delAll.DynamicInvoke(Nothing)
> > End Sub
> >
> > Y me gustaria lanzar los 2 delegados simultaneamente, ¿ Como lo hago ?
>
>
>
Respuesta Responder a este mensaje
#4 A.Poblacion
25/01/2005 - 07:58 | Informe spam
Para poder modificar la interfaz de usuario desde un hilo separado, hay que
hacer la llamada a través de un delegado, el cual se le pasa como argumento
al método Invoke del Form. Este método sí que admite ser llamado desde otro
hilo. Cuando recibe el delegado, lo invoca, y ese delegado es el que apunta
a la rutina que modifica el TexBox del Form. Así sí que funciona y no da
errores.

Ejemplo:

Private x as string
Sub hilo1()
x="Hola"
Me.Invoke(new MethodInvoker(AddressOf(TocaPantalla))
End Sub
Sub TocaPantalla()
Me.TextBox1.Text=x
End Sub
...
Dim t As New Thread(New ThreadStart(AddressOf hilo1))
t.Start()


From: "axxegfx"
Newsgroups: microsoft.public.es.dotnet.vb
Sent: Monday, January 24, 2005 1:23 PM
Subject: Re: hilos y delegados


No me serviria de hecho la programación inicial estaba programa en


multihilo,
pero
me bloqueaba el interfaz del aplicación form, además dentro de ese hilo


hay
un bucle FOR-NEXT y dentro de este bucle quiero hacer que la variable se


vea
en un textbox y con ME.textbox1.text=x obtengo un error de referencia
cruzada por eso había pasado a los delegados pues es el único que además


no
me bloquea la interfaz.

Alguna sugerencia?????

"A.Poblacion" wrote:

> Para lanzar dos delegados simultaneamente tienes que usar programación


en
> multihilo. Para ello dispones de la clase System.Threading.Thread. Un
> ejemplo:
>
> Dim t As New Thread(New ThreadStart(AddressOf hilo1))
> t.Start()
> Dim t2 As New Thread(New ThreadStart(AddressOf hilo2))
> t2.Start()
>
>
> "axxegfx" wrote in message
> news:
> > Pregunta de novato :
> > Estoy usando el siguiente código
> > Sub empezar()
> > Dim del As MyDelSub
> > Dim del2 As MyDelSub
> > Dim delAll As [Delegate]
> > del = New MyDelSub(AddressOf hilo1)
> > del2 = New MyDelSub(AddressOf hilo2)
> > delAll = MulticastDelegate.Combine(del, del2)
> > delAll.DynamicInvoke(Nothing)
> > End Sub
> >
> > Y me gustaria lanzar los 2 delegados simultaneamente, ¿ Como lo hago ?
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida