Threads en C# y Windows Forms (.net 2.0)

Hace unos días que estoy trasteando con C#, y hace un rato, me dije; ¿cómo funcionarán los threads en C#?

Bien, pues me puse a investigar, y comencé a programar. Los threads en consola muy bonitos, y sencillos – como los pthreads (“Posix Threads”) – , el caso, es que quería aplicar esto a una aplicación gráfica, y me topé con el impedimento, que desde un nuevo thread que crease el programa principal (función main), no podía modificar valores de los widgets (controles), así que decidí investigar sobre el tema…

Encontré una solución, que era que cada función (o método, si está dentro de una clase)  que quisiese modificar el valor de algún widget, fuera declarada con un “delegate”, y esta función, se ejecutaría en el trhead principal de la interfaz gráfica, que sería quien modificaría el valor del widget (y no el thread recién creado, modifica el widget). Así que tenía que hacer, que la función del trhead recién creado, llamase a esa función “delegada”, y ella ya modificase el widget correspondiente (esto se realiza con Invoke ).

Captura del programa demo

En resumen:

1. Crear hilo

2. Iniciar hilo

3. Ese “hilo” llama a la función delegada

4. La función delegada realiza cualquier cosa sobre el

widget

5. Retorna el control al hilo llamante

En código C#

/* declaración del thread th1 */
private Thread th1 = null;
/* declaración de funciones delegadas */
public delegate void Thread1Delegate();
/* creamos e iniciamos el thread th1 */
th1 = new Thread(new ThreadStart(Thread1));
th1.IsBackground = true;
th1Running = true;
th1.Start();


private void Thread1() {
/* función del hilo 1 */
while (true) {
/* invocamos la función delegada
* para que haga algo con un widget */
Invoke(new Thread1Delegate(Thread1Widget));
/* dormimos el thread 1 1sec */
Thread.Sleep(1000);  }
}

private void Thread1Widget() {
/* Hace algo con algún widget */
this.algun_widget.Propiedad = "Valor";
}

He adjuntado un rar con un proyecto de C# para Visual Studio 2005 (y para SharpDevelop) que muestra una ventana principal con dos textboxes que son controlados por hilos (que escriben en cada uno de ellos).

Ficheros adjuntos

3 Responses to Threads en C# y Windows Forms (.net 2.0)

  1. tyntia escrigué:

    heyytt holaa! muchas gracias x tu aportacionn!! =)
    esta demasiadoo bienn😀

  2. Rodrigo escrigué:

    muy buen aporte…keda suer bien explikado el manejo de thread….

    grax…;)

  3. Rony escrigué:

    Gracias, esta bueno tu ejemplo🙂

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s

%d bloggers like this: