Ejemplo de Hilos

10/02/2008 - 17:48 por News Microsoft | Informe spam
Hola !! alguien me puede pasar un enlace o algun ejemplo de acceso a
controles desde un hilo distinto?
quiero un ejemplito simple que haga por ejemplo:

Tengo un formulario Windows con un ritchtextbox y un boton

cuando le de al boton en el evento onclick hago un bucle for
for ( int i = 0; i < 100000 ; ++i )
ritch.AppendText("Iteracion" + i.tostring() + caracteres retorno carro
e inicio de linea )

Quiero hacerlo de modo que ese bucle lo haga de forma asincrona y me rellene
el ritchtextbox sin dejarme bloqueado el formulario.

Gracias de antemano !!

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
10/02/2008 - 20:38 | Informe spam
"News Microsoft" wrote in message
news:ORrZ$
Mostrar la cita
Si estás usando la versión 2.0 (o posterior) del Framework, probablemente
te merezca la pena usar la clase BackgroundWorker. Si usas su evento
ProgressChanged para comunicar los cambios a los controles, no necesitas
prepcuparte de transportar la ejecución al hilo principal mediante
Conrol.Invoke, porque ya lo hace el BackgroundWorker internamente, con lo
que resuta más simple que iniciar un Thread y manipular los controles desde
él.

El artículo del BackgroundWorker en MSDN trae un ejemplo completo:
http://msdn2.microsoft.com/en-us/li...orker.aspx
#2 Paulino Padial
11/02/2008 - 01:36 | Informe spam
Podrías ser un poco mas concreto?
el ejemplo del MSDN es el que utiliza dicho metodo que comentas, el
processchanged para cambiar la barra de progreso.
Todo funciona perfecto cuando accedes a una progressbar pero la cosa cambia
cuando intentas acceder a cualquier otro control, como por ejemplo un
richtextbox que es lo que estoy intentando solucionar y no doy con la tecla.

Necesito ir metiendo el resultado de la operacion del for en el rich sin
bloquear el formulario, seguro que es una tonteria pero no doy con la tecla
:(

saludos cordiales,

"Alberto Poblacion"
escribió en el mensaje de noticias:
Mostrar la cita
#3 Alberto Poblacion
11/02/2008 - 09:26 | Informe spam
"Paulino Padial" wrote in message
news:
Mostrar la cita
O.K., un ejemplo con hilos y con Invoke. Crea un formulario y arrastra
un RichTextBox y un botón. Llama cmdlanzarProceso al botón. Añade un "using
System.Threading;". Añade este código dentro de la clase Form1:

private void cmdlanzarProceso_Click(object sender, EventArgs e)
{
Thread t = new Thread(RutinaProceso);
t.IsBackground = true;
t.Start();
}

private void RutinaProceso()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000); //Simula el proceso
this.Invoke(new
DelegadoActualizarPantalla(ActualizarPantalla), "Terminado paso "+i);
}
}

private delegate void DelegadoActualizarPantalla(string texto);
private void ActualizarPantalla(string texto)
{
this.richTextBox1.Text += "" + texto;
}


Ya está. Ejecuta el proyecto y pulsa el botón. Verás que se te actualiza
el RichTextBox con el proceso de background sin que se bloquee el
formulario.
#4 Paulino Padial
11/02/2008 - 14:03 | Informe spam
eso es lo que buscaba, muchisimas gracias :)

saludos cordiales

"Alberto Poblacion"
escribió en el mensaje de noticias:
Mostrar la cita
Ads by Google
Search Busqueda sugerida