Guillermo Javier Salazar STAFF TEAM
Mensajes : 181 Puntos : 349 Localización : México Comentarios : El azar favorece a una mente preparada.
| Tema: Aprendiendo Thread (Hilos) Dom Mar 06, 2011 5:17 pm | |
| Aprendiendo Thread (Hilos)Un hilo nos sirve para manipular el tiempo de ejecución de un proceso, asi como controlar la ejecución de distintos procesos a la vez, Por ejemplo, cuando tenemos un proceso demasiado tardado, como podría ser alguna ecuación aritmética compleja o quizas consultas a la BD, nuestro programa tiende a colgarse (ciclarse, congelarse, pararse, "deja de funcionar") durante el tiempo que se realice dicho proceso, esto puede ser molesto, pero podemos usar un hilo para este proceso y separarlo de la ejecución de nuestro programa, asi el programa seguirá funcionando normal, mientras nuestro proceso esta ejecutándose. Veamos un ejemplo: ---------------------------------------------------- - Código:
-
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading;
namespace WindowsFormsApplication1 {
public partial class Form1 : Form { Thread hilo1; Thread hilo2; byte r, g; bool b1, b2;
public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { r = 0; g = 255; b1 = false; b2 = true; hilo1 = new Thread(new ThreadStart(proceso1)); hilo2 = new Thread(new ThreadStart(proceso2)); hilo1.Start(); hilo2.Start(); }
public void proceso1() { while (true) { Thread.Sleep(10); if (r >= 0 && r <= 255 && b1 == false) { r++; if (r == 255) b1 = true; } if (r >= 0 && r <= 255 && b1 == true) { r--; if (r == 0) b1 = false; } pictureBox1.BackColor = Color.FromArgb(r, 80, 100); } }
public void proceso2() { while (true) { Thread.Sleep(10); if (g >= 0 && g <= 255 && b2 == false) { g++; if (g == 255) b2 = true; } if (g >= 0 && g <= 255 && b2 == true) { g--; if (g == 0) b2 = false; } pictureBox2.BackColor = Color.FromArgb(100, g, 80); } }
private void Form1_FormClosed(object sender, FormClosedEventArgs e) { hilo1.Abort(); hilo2.Abort(); } } }
---------------------------------------------------- Tenemos 2 Thread: "hilo1" e "hilo2", a cada uno le asociamos un método al "hilo1" el método "proceso1" y al "hilo2" el método "proceso2", Lo que permiten lo Thread es que ambos métodos (proceso1 y proceso2) se ejecuten simultáneamente. Los Thread se ejecutan utilizando el método "Start()" y se termina con el "Abort()", también se usa el método "Sleep()" que pausa la ejecución del thread durante un tiempo dado en milisegundos. Lo que hace el programa es variar los colores de fondo de ambos picturesBox con un bucle infinito. [Tienes que estar registrado y conectado para ver esa imagen] | |
|