Hilos Parametrizados

Hola a todos, hace poco me enfrente a un caso que puede ser comun en sus ambientes de trabajo y es el tema de hilos parametrizados, es decir que el evento que ejecuta el hilo se lleve algunos parametros que cambian.

La solucion que a veces dan en algunos foros es desarrollar este tema con variables estaticas, sin embargo a mi no me funciono muy bien. Para esto, dentro del Framework 2.0 tengo una solucion bastante buena y sencilla de realizar.

Ejemplo: Debo lanzar n cantidad de hilos con diferentes parametros cada hilo.

private Thread myThread;

Donde vaya a realizar el envio de los parametros y la creacion del hilo hago lo siguiente:

//Creo un objeto del tipo ParametrizedThreadStart, dentro del constructor de este envio el metodo
//que deseo se ejecute dentro del Thread
ParameterizedThreadStart myPtrThread = new ParameterizedThreadStart(metodoToExecute);
//Creo el hilo pasandole el objeto ParametrizedThreadStart
myThread = new Thread(myPtrThread);
//Creo un ArrayList con la cantidad de parametros que desee pasarle. Para este caso 3 parametros.
ArrayList myParameters = new ArrayList();
myParameters.Add(Param1);
myParameters.Add(Param2);
myParameters.Add(Param3);
//Invoco al metodo Start parandole el ArrayList con los Parametros.
myThread.Start(myParameters);

 Ahora la definicion del metodo que deseo se ejecute con parametros dentro del hilo.

public void executeShell(object obj)
{
    try
   {
        //Declaro un arraylist para recibir el object. Para esto hago cast
        ArrayList arrayParameters = (ArrayList)obj;
        //Defino tantos argumentos como reciba en cada parametro        
        string Parametro1 = (string)arrayParameters[0];
        int parametro2 = (int)arrayParameters[1];
        DateTime Parametro3 = (DateTime)arrayParameters[2];
        …

De este modo cada hilo que lance en el primer metodo ira con los parametros que yo le asigne de manera variable.

Saludos,

Roberto C. Erazo M.
MVP – Visual C#

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s