menú
¿Música de YouTube sin molestos comerciales? ¡Ahora es posible!
TubeFiesta es una aplicación que te permite reproducir música de YouTube como un reproductor tradicional.
Crear listas, reproducción aleatoria, repetir, y hasta exportar el video a otra pantalla.
Conocer más Ir a tfiesta.com

Tutorial de Hilos en c# con ejemplos - Parte 1

Publicado el 28/11/2013 | 38890 visitas

El concepto de Hilos o Threading no es un tema desconocido para la gran mayoría de programadores con experiencia, y tampoco pobre en documentación en Internet, pero hago este tutorial de hilos para c# tratando de explicar lo más fácil posible su uso, y lo más importante. Para que y cuando usarlos. Así que "Manos a los hilos".

Antes de iniciar lectura te recomiendo que conozcas acerca de los delegados en c#

Una aplicación sin hilos

Antes de responder la pregunta hay que conocer sobre los contextos, los contextos son cada uno de los procesos que conforman una aplicación a nivel de procesador. Hablemos de una aplicación de escritorio: La interfaz gráfica de una aplicación de escritorio se ejecuta en un mismo contexto (o proceso), podemos saber eso ya que al darle clic a un botón que hace alguna tarea, la interfaz se bloqueará hasta que haya terminado dicha tarea.

Vamos directamente a la practica creando una aplicación de escritorio en C# (Yo la llamaré "Hilos"), si en realidad estás interesado en aprender te recomiendo que practiques tu mismo el ejemplo.

proyecto hilos c#

Tendremos en el formulario un botón (BtnIniciarProceso) para iniciar un proceso que se demorará más de 10 segundos y otro botón (BtnMostrarMensaje) que nos mostrará un "Hola Edwin" en un MessageBox. Vamos al código.

Importar el siguiente using.

using System.Threading;

Implementemos el evento click de ambos botones,

Crearemos un método que se llama CorrerProceso y lo llamaremos desde el evento del botón BtnIniciarProceso

private void CorrerProceso()
{
    //Hacer que se tarde 10000 milisegundos (10 segundos)
    Thread.Sleep(10000);
    MessageBox.Show("Proceso finalizado");
}

Como ven, la clase Thread tiene un método estático llamado Sleep(int), lo que hace es "dormir" en esa línea el tiempo en milisegundos que le pasemos como parámetro. El código anterior hará que se "duerma" 10 segundos, así simularemos una consulta muy pesada o algún otro proceso.

En el evento clic del otro botón (BtnMostrarMensaje) pondremos un simple mensaje.

MessageBox.Show("Hola Edwin");

Todo quedará así:

ejemplo threading hilos

Que haremos?.
Correremos la aplicación y hacemos clic en el botón "Iniciar Proceso" y mientras se ejecuta el proceso (que debe durar 10 segundos) hacemos clic en el botón "Mostrar mensaje". Notarás que mientras se ejecuta el proceso no te mostrará el mensaje "Hola Edwin" ya que la interfaz gráfica está bloqueada. Esto sucede porque el proceso se ejecuta en el mismo contexto (mismo hilo) de la interfaz gráfica, por lo tanto solo puede ejecutarse una tarea a la vez.

Que es un hilo

Un hilo es un proceso que se ejecuta en un contexto diferente y simultáneamente al que lo crea. es decir, crea un subproceso.

Cómo crear un hilo en C#

Continuando con nuestro proyecto "Hilos" realizaremos la misma tarea pero esta vez usando hilos. Antes conozcamos lo siguiente:

  • Un hilo es una instancia de la clase Thread.
  • Al crear una instancia de Thread debemos pasarle como parámetro la instancia de un delegado, dicho delegado "apunta" al método que realizará el proceso en segundo plano.

Como se que lo anterior puede llegar a ser difícil de entender vamos a practicarlo pero YA.

Los cambios que necesitamos solo los haremos en el evento clic del botón BtnIniciarProceso. Veamos:

//Creamos el delegado
ThreadStart delegado = new ThreadStart(CorrerProceso);
//Creamos la instancia del hilo
Thread hilo = new Thread(delegado);
//Iniciamos el hilo
hilo.Start();

Es simple, creamos un delegado indicándole el nombre del método que correrá, luego creamos una instancia de Thread indicandole el delegado que será ejecutado y por último damos inicio al proceso pero por medio del hilo. (en un subproceso).

Si lo pruebas ta darás cuenta de que ya puedes correr el proceso y a la vez puedes mostrar el mensaje "Hola Edwin" de forma simultanea y sin perjudicar (bloquear) la interfaz gráfica.

Compartir con tus amigos es una forma de agradecer.

En la segunda parte del tutorial te enseñaré cómo utilizar controles de usuario desde un hilo y algunos usos mas "avanzados" sobre la multi-tarea.

Saludos.

Talvez te interese...

Tutorial de sockets en c# con ejemplos - Parte 2 - UDP
Tutorial de sockets en c# con ejemplos - Parte 1
[solución] No puede obtener acceso a la página solicitada debido a la configuración de la extensión
[solución] El proveedor de almacenamiento especificado no se encuentra en la configuración
blog comments powered by Disqus