Israel Aéce

Microsoft MVP, MCP, MCAD, MCTS, MCPD e MCT

My Links

Blog Stats

Archives

Post Categories

Links

Login

Parâmetros para Thread

Fiquei curioso para saber como podemos passar parametros para Threads, ou seja, quando definimos um método de uma determinada classe que nossa Thread vai executar quando a mesma for iniciada. Atualmente não se tem muitos recursos para fazer isso e para conseguirmos suprir essa necessidade definimos o construtor da classe para receber o parametro que desejamos passar para que o método o utilize. Em código, fica mais ou menos como:

     class MinhaApp
     {
          [STAThread]
          static void Main(string[] args)
          {
               Teste t = new Teste("Meu Parametro");
               Thread tr = new Thread(new ThreadStart(t.Escreve));
               tr.Start();
          }
     }

     public class Teste{
          private string _param;
          public Teste(string param){
               this._param = param;
          }
          public void Escreve(){
               Console.WriteLine(this._param);
          }
     }

Como podemos ver, a classe "Teste" recebe em seu construtor o(s) parametro(s) que vamos utilizar dentro do método "Escreve" e, quando o método for executado, teremos a certeza que os parametros estarão disponíveis para a utilização.

Andei analisando e, na versão 2.0 do .NET Framework temos um novo delegate do tipo ParameterizedThreadStart, que recebe um parametro do tipo Object e, para o ideal funcionamento deste, o método Start da classe Thread agora tem um overload, que recebe o parametro do tipo Object que será passado para o delegate. Em conjunto com os métodos anonimos, o código fica bastante elegante:

     class Program
     {
          static void Main(string[] args)
          {
               ParameterizedThreadStart pts = new ParameterizedThreadStart(delegate(object o)
               {
                    Console.WriteLine(o.ToString());
               });
               
               Thread t = new Thread(pts);
               t.Start("Meu Parametro");
          }
     }

posted on Thursday, September 15, 2005 1:58 AM

Feedback

# re: Parâmetros para Thread 9/15/2005 6:31 AM Pedro Santos

Não é boa prática andar a criar threads, só em certas situações específicas é que tal faz sentido. É aconselhável usar antes o ThreadPool e este já permite passar parãmetros à thread que executar o pedido.

# Thread.Start 9/21/2005 6:25 PM LA.Net

# re: Parâmetros para Thread 9/22/2005 5:28 PM Luiz Ragazzi

Mas, acho que não é muito interessante usar o ThreadPool, porque você precisa controlar o tempo que o método vai executar, senão a sua aplicação nao dá o tempo necessário para executar aquele método que foi chamado na Thread.

Se eu estiver enganado, por favor avisem.

# Invoca 7/9/2006 4:30 AM Pedro Rui Silva

Title  
Name  
Url
Box Code
Protected by FormShield
Comments