ParameterizedThreadStart

Desde el Framework 2.0 podemos pasar un objeto cómo parametro a un hilo, pongo un pequeño ejemplo para que se entienda mejor:
class Program2
{
    static void Main(string[] args)
    {
        Console.WriteLine("Comienzo el programa principal....");
        ParameterizedThreadStart ts = new ParameterizedThreadStart(MetodoConParametro);

        Thread t = new Thread(ts);
        Console.WriteLine("start del hilo");
        t.Start("Envio mi parametro...");
        t.Join();
        Console.WriteLine("Finalizo mi programa principal.");
        Console.ReadLine();
    }

    static void MetodoConParametro(object mensaje)
    {
        Console.WriteLine("a continuación muestro el mensaje, hago un cast para convertir el objeto a string");
        Console.WriteLine((string)mensaje);
        Thread.Sleep(1000);
        Console.WriteLine("Finalizo el método.");
    }
}

Estados de los Threads en c#

Últimamente estoy trabajando bastante con threads en c#, uno de los puntos más importantes es tener claro los diferentes estados en los que puede estar un Thread, los enumero a continuación:
  • Running: En este estado el thread está corriendo y no hay pendiente ningún ThreadAbortException.
  • StopRequested: Se ha ejecutado una petición de Stop. Se usa internamente.
  • SuspendRequested: Se ha ejecutado una petición de suspensión.
  • Background: Permite ejecutar un Thread en segundo plano mientras el thread principal sigue funcionando
  • Unstarted: No se ha invocado el método Start
  • Stopped: Se ha detenido explicitamente el thread
  • WaitSleepJoin: El thread está bloqueado:  Ha llamado al método Sleep,
  • Suspended: El thread esta suspendido.
  • AbortRequested: Se ha realizado la petición de anular.
  • Aborted: El thread está anulado