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

Anúncios

2 comentários sobre “Parâmetros para Thread

    • 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.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s