Parâmetros para Thread

by Israel Aece 14. September 2005 23:07

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");
          }
     }

Tags:

.NET Framework | Async

Comments

6/29/2009 1:45:31 PM #

Charles

E no caso de precisar executar um método onde são necessários dois ou mais parametros ?

Charles Brazil

6/29/2009 1:54:40 PM #

IsraelAece

Boas Charles,

Como o parâmetro é um objeto, você pode passar qualquer tipo.

Apenas faça o casting dentro do método para este tipo (com várias propriedades) e consuma como desejar.

IsraelAece Brazil

8/26/2009 8:45:41 AM #

Paulo Viana

Muito bom. Estou automatizando um serviço de deploy. Esta dica de passar parametros foi fundamental.

Paulo Viana Brazil

Comments are closed

Powered by BlogEngine.NET 1.5.0.0
Theme by Mads Kristensen

Sobre

Meu nome é Israel Aece e sou especialista em tecnologias de desenvolvimento Microsoft, atuando como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. [ Mais ]

Twitter

Host