Foros del Web » Programación para mayores de 30 ;) » .NET »

Ejecución de proceso en una hebra

Estas en el tema de Ejecución de proceso en una hebra en el foro de .NET en Foros del Web. Hola amigos, estoy intentando de poner en practica la programacion con hilos de ejecución, estoy copiando y pegando un ejemplo de un libro, pero me ...
  #1 (permalink)  
Antiguo 20/03/2008, 02:49
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Pregunta Ejecución de proceso en una hebra

Hola amigos, estoy intentando de poner en practica la programacion con hilos de ejecución, estoy copiando y pegando un ejemplo de un libro, pero me salta un error, que es el siguiente:
Operación no válida a través de subprocesos: Se tuvo acceso al control 'ListBox1' desde un subproceso distinto a aquel en que lo creó.

En el formulario solo tengo 1 Listbox, 1 Textbox y 1 boton para iniciar la ejecución.

Y el código es el siguiente...

Código:
Imports System.Threading
 PublicClass Form1
 Private oHilo As Thread
 PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As   System.EventArgs) Handles Button1.Click
   Me.oHilo = New Thread(New ThreadStart(AddressOfMe.RellenaLista))
   Me.oHilo.Start()
 EndSub
 
 PrivateSub RellenaLista()
   Dim icontador, iCuentaBis AsInteger
   Me.ListBox1.Items.Clear()
   For ico = 0 To 10000
       Me.ListBox1.Items.Add("Contador: " & icontador)
       For iCu = 1 To 50000
'Retardo...
       Next
   Next
'Finalizamos la hebra...
   Me.oHilo.Abort()
 EndSub
EndClass 

Muchas gracias por vuestra ayuda!!!
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #2 (permalink)  
Antiguo 20/03/2008, 08:04
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 7 meses
Puntos: 87
Re: Ejecución de proceso en una hebra

En vez de invocar directamente a Llenar Listas haz otro metodo q lo invoque de la siguiente manera

// este es el q pasas como argumento del threadstart
public Otrometodo
{
BeginInvoke(metodo); // donde metodo esta definido como un delegado asi q solo cambia la deficinicion de tu metodo de llenado a un delegado
}
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 20/03/2008, 08:23
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Re: Ejecución de proceso en una hebra

1º ¿si paso RellenarLista a delegado, como le meto el codigo?
2º ¿como se usa un delegado (instancia, y metodos que debo manejar)?



Código:
PublicClass Form1
Private oHilo As Thread
PublicDelegateSub RellenaLista()
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.oHilo = New Thread(New ThreadStart(AddressOfMe.RellenaLista))
Me.oHilo.Start()
EndSub
 
'error --> ya esta declarado arriba...
PublicSub RellenaLista()
Dim icontador, iCuentaBis AsInteger
Me.ListBox1.Items.Clear()
For ico = 0 To 10000
Me.ListBox1.Items.Add("Contador: " & icontador)
For iCu = 1 To 50000
'Retardo...
Next
Next
'Finalizamos la hebra...
Me.oHilo.Abort()
EndSub
PublicSub EsteLePaso()
'error --> me indica que es un tipo...
BeginInvoke(RellenaLista)
EndSub
EndClass
 





muchas gracias algo de eso he leido, pero no consigo sacar por mi cuenta nada en limpio...

Mil gracias por preocuparte!!!
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #4 (permalink)  
Antiguo 20/03/2008, 08:27
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 7 meses
Puntos: 87
Re: Ejecución de proceso en una hebra

pondre un ejemplo q hice en unos minutos ando desayunando
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 20/03/2008, 08:40
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 7 meses
Puntos: 87
Re: Ejecución de proceso en una hebra

public partial class Form1 : Form
{

public delegate void MyDelegate(int dato); // Delegado que no recibe ni manda

public Form1()
{
InitializeComponent();
}

public void InsertarDatoAListBox(int dato)
{
listBox1.Items.Add(dato);
}

public void Rellena()
{
MyDelegate delegado = new MyDelegate(InsertarDatoAListBox);
for (int i = 0; i < 10000000; i++)
{
BeginInvoke(delegado, new object[] {i });
Thread.Sleep(2000);
}
}


private void button1_Click(object sender, EventArgs e)
{
Thread mythread = new Thread(new ThreadStart(Rellena));
mythread.Start();
}
}


Solo recuerda algo , matar al hilo si cierras la ventana si no cuando intente seguir funcionando el delegado te dira q no hay identificador de ventana definido
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #6 (permalink)  
Antiguo 20/03/2008, 09:11
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 7 meses
Puntos: 87
Re: Ejecución de proceso en una hebra

Podrias usar un BackGroundWorker y en ReportProgress invocar al delegado igual, es mas seguro porq no sigue vivo cuando la ventana se cierra.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #7 (permalink)  
Antiguo 20/03/2008, 09:28
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 18 años, 11 meses
Puntos: 16
Re: Ejecución de proceso en una hebra

bueno ahora pregunto una cosa mas:
esto me bloquea el formulario, como si no hiciera un hilo diferente...


¿como podriahacer para que no me bloqee el formulario?

YA HE ENCONTRADO LA SOLUCION QUE ME DISTE ANTES...

XD

no es como ami me gustaria, pero es la forma de solucionarlo..
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)

Última edición por Drako_18; 20/03/2008 a las 09:48 Razón: mejora la pregunta
  #8 (permalink)  
Antiguo 20/03/2008, 09:40
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 7 meses
Puntos: 87
Re: Ejecución de proceso en una hebra

no te bloquea al formulario de hecho por eso tienes 2 hilos
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:04.