Utilizar Threads brota a la necesidad de ejecutar multiples operaciones relativamente
pesadas.
Pesadas en el sentido que el tiempo para concluir su ejecucion, es relativamente indeterminado. Es decir, la aplicacion NO puede quedarse a la espera de que concluya dicha operacion sin que el usuario quede inhabilitado de continuar usando el software.
Los Threads permiten una solucion a esta necesidad.
Sin embargo, como toda operacion siempre se requerira de una especie de parametrizacion, es decir, enviarle una serie de parametros para que se ejecute con ciertas variables inicializadas previamente.
¿Que hacer ante este requerimiento? ¿Como puedo pasarle parametros a un metodo corriendo sobre un Thread?
Un metodo extenso, es casi siempre una potencial clase, es decir un class, que podras encapsular de la manera que mejor creas conveniente.
Aquel metodo relativamente extenso y
pesado, podra ser abstraido a una clase, a la cual expondras un metodo publico sin parametros: Run, por ejemplo.
El constructor de la clase, tendra todos los parametros necesarios que requiera esa operacion relativamente
pesada.
Entonces, tu instanciaras un objeto de dicha clase, y colocaras sobre un Thread el metodo Run de aquella class.
MyClass o = new MyClass( param1, param2 )
Thread t = new Thread( o.Run );
t.Start();
Este mecanismo te brindara la solucion a tus problemas.
Por otro lado, existe una clase propia del .NET Framework llamada
ParameterizedThreadStart pero como todo lo que esta disponible para usar en el .NET Framework, tiene un costo, perder el control sobre la ejecucion interna de la operacion sobre el Thread.
Algo que a la primera, puede que NO le tomes la minima importancia, pero que luego, conforme van madurando el producto de software, este debe ajustarse a mas necesidades que la inicialmente indicadas.
Por lo que perder el control, tendra un costo mas alto despues.
Ese despues, esta solo a la vuelta de la esquina. NO lo dudes!