Hola, hoy veremos como manejar subprocesos en C# para evitar que nuestras pantallas se congelen al hacer una acción, esto aplica tanto para windows forms como para web forms, pero es mas común manejar lo en windows form. El manejo de estos hilos se pueden manejar con la clase Thread, aquí un ejemplo sencillo:
Thread t = new Thread(new ThreadStart(Process));
t.Start();
// Función a ejecutar en un hilo del proceso principal
private void Process()
{
////... Código
}
// Función a ejecutar en un hilo del proceso principal
private void Process()
{
////... Código
}
Como verán es muy sencillo ejecutar un método en un subproceso/hilo, con en metodo Start se dara inicio a ese subproceso y con la instrucción Abort, como su nombre lo dice podrás detener el subproceso lanzado de manera explicita. A continuación les dejo un ejemplo mas real de como se comportaría una pantalla si se ejecuta un proceso como subproceso y de manera normal.
using System;
using System.Windows.Forms;
using System.Threading;
namespace Multihilo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void BtnProcess_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(Process));
//BtnProcess.Enabled = false;
t.Start();
//t.Join();
//BtnProcess.Enabled = true;
//Sin Multiproceso
}
private void Process()
{
double i, j;
double num=0;
for (i = 0; i < 10000; i++)
{
for (j = 0; j < 90000;j++ )
num = i;
}
MessageBox.Show("Numero = " + num.ToString());
}
private void BtnNormal_Click(object sender, EventArgs e)
{
Process();
}
private void BtnJoin_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(Process));
//BtnProcess.Enabled = false;
t.Start();
t.Join();
//BtnProcess.Enabled = true;
}
}
}
using System.Windows.Forms;
using System.Threading;
namespace Multihilo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void BtnProcess_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(Process));
//BtnProcess.Enabled = false;
t.Start();
//t.Join();
//BtnProcess.Enabled = true;
//Sin Multiproceso
}
private void Process()
{
double i, j;
double num=0;
for (i = 0; i < 10000; i++)
{
for (j = 0; j < 90000;j++ )
num = i;
}
MessageBox.Show("Numero = " + num.ToString());
}
private void BtnNormal_Click(object sender, EventArgs e)
{
Process();
}
private void BtnJoin_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(Process));
//BtnProcess.Enabled = false;
t.Start();
t.Join();
//BtnProcess.Enabled = true;
}
}
}
Espero que esto les sea de utilidad.
Código fuente:
Descargar(en VS2008)
-------------------------------------
Lo que se puede imaginar... se puede programar
No hay comentarios:
Publicar un comentario