Академический Документы
Профессиональный Документы
Культура Документы
if (r == 255)
b1 = true;
}
if (r >= 0 && r <= 255 && b1 == true)
{
r--;
if (r == 0)
b2 = false;
}
pictureBox1.BackColor = Color.FromArgb(r, 80, 100);
}
}
private void Hilo2()
{
byte g = 255;
bool b2 = true;
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);
}
}
Una vez programadas las 2 rutinas, agregaremos el siguiente cdigo al botn:
Thread p1 =new Thread(new ThreadStart (Hilo1));
Thread p2 = new Thread(new ThreadStart(Hilo2));
p1.Start();
p2.Start();
Este cdigo genera un hilo por cada rutina, de esta manera cada rutina
tendr sus propios recursos sin interferir con la forma principal.
Ojo: No olviden agregar la librera System.Threading ya que sin esta no podrn
crear los hilos. Espero y les ayude en sus proyectos.
Explicacin:
Lo que se debe entender primero es que existen dos hilos: "p1" y "p2" (o dos
objetos de la clase "Thread", en ingls "Hilo") cada uno asociado a un mtodo: A
"p1" le corresponde "Hilo1" y a "p2" le corresponde "Hilo2". Lo que "p1" y "p2"
permiten es que ambos mtodos (Hilo1 e Hilo2) se ejecuten de manera
simultnea.
Todas las otras variables en el programa son de control. Los hilos empiezan a
ejecutarse al llamar al mtodo "Start" y se terminan con "Abort". El C# no permite
llamar de nuevo a "Start" para un hilo que ya se est ejecutando.
Lo que hace el programa simplemente es variar el color de ambos PictureBoxes
en
un
bucle
que
jams
termina,
para
ello
se
usa
el
comando CualquierPictureBox.BackColor =Color.FromArgb(100, g, 80);
Tambin uso el mtodo Thread.Sleep que detiene la ejecucin del hilo durante el
tiempo en milisegundos que va entre parntesis. Esto es para que los colores
varen despacio y se puedan apreciar.
Cada vez que dentro de un mtodo se usa la palabra "Thread" sta se refiere al
hilo que est asociado a l.
Aqu est de nuevo el cdigo por si te da error el anterior
using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
Thread p1;
Thread p2;
byte r, g;
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)
{
p1.Abort();
p2.Abort();
}
}
}
Otro ejemplo de hilos:
using System;
using System.Threading;
public class Program
{
public static void Main()
{
Thread miThread = new Thread(new ThreadStart(MiFun));
miThread.Start();
MiFun();
}
public static void MiFun(){
Console.WriteLine("Hola, soy el thread");
for (int i=0; i<=10; i++) System.Console.WriteLine ("Iteracin:" + i);
}
}
El resultado en pantalla:
Hola, soy el thread
Iteracin:0
Iteracin:1
Iteracin:2
Iteracin:3
Iteracin:4
Iteracin:5
Iteracin:6
Iteracin:7
Iteracin:8
Iteracin:9
Iteracin:10
----Hola, soy el thread
Iteracin:0
Iteracin:1
Iteracin:2
Iteracin:3
Iteracin:4
Iteracin:5
Iteracin:6
Iteracin:7
Iteracin:8
Iteracin:9
Iteracin:10
Otro ejemplo:
using System;
using System.Threading;
Veremos en pantalla:
Escribiendo desde ==> 1
Escribiendo desde ==> 2
Tarea:
Crea un script que imprima los nmeros pares e impares del 1 al 100
utilizando hilos