Executando Thread - Windows Mobile

Nesse tutorial vou ensinar como criar, executar e parar uma Thread para que você utilize em sua aplicação, abaixo um simples entendimento sobre Thread.

Thread é utilizada para criar uma ou várias operações concorrentemente ou simultaneamente através das chamadas “Linhas de execução”.

Quando sua aplicação está sendo feita uma conexão onde ela está recebendo dados e você decide ao mesmo tempo fazer algum processo ou tarefa (como mensagens ao usuário, fazer uma nova conexão ou outro processo que deseja fazer) utilizamos o conceito de Thread.

Vamos fazer uma aplicação onde teremos um menu com 2 opções, sair da aplicação e ativar a thread. Depois de ativar a thread teremos um campo Text para digitarmos algo enquanto a Thread é executada.

Vamos começar?

Crie um projeto Smart Device no Visual Studio com o nome: ExemploThread e no Form coloque:

3 Label’s, 1 TextBox e 2 opções no menu, como a figura abaixo.

1.JPG

No código, primeiramente vamos utilizar o System.Threading, que obtem as classes para implementarmos Thread’s.

Coloque:


using System.Threading;

Crie 2 variáveis, uma int e outra a nossa Thread:


Thread thread;

int i = 0;

 

Crie um método EventHandler com o seguinte código:

 

public void atualizaLabel(object sender, EventArgs e)

{

    lblMensagem.Text = “Quantidade: “ + i.ToString();

    lblMensagem.Update();

}

EventHandler é um representante predefinido especificamente que representa um método manipulador de eventos de um evento que não gera os dados.Se o evento gerar dados, você deve fornecer seu próprio tipo de dados evento personalizado e criar um representante onde o tipo do segundo parâmetro é seu tipo personalizado, ou usar a classe delegate genérico EventHandler((TEventArgs) e substitua seu tipo personalizado para o parâmetro de tipo genérico.

Informação acima obtida por:  http://msdn.microsoft.com/pt-br/library/system.eventhandler.aspx

Agora crie um método void para executarmos a Thread:

void run()

{

   for (i = 0; i <= 200; i++)

      {

         this.Invoke(new EventHandler(atualizaLabel));

            Thread.Sleep(200);

      }

  

   return;

}

Note que chamamos a classe atualizaLabel pelo EventHandler que por sua vez é executado pelo Invoke.

Por que não chamamos a classe diretamente? Você cria uma thread e quando ela está sendo executada não podemos fazer alguns processo diretamente da thread executado, como Refresh, Invalidate, atualizar um label, etc. Isso irá resultar em uma exception.

Para resolver isso, chamamos o Invoke da classe para executar outro processo enquanto nossa thread é executada. Complicado né? Mas é assim que funciona… rs,rs!!!

Agora crie dois métodos de nosso menu, um para sair da aplicação e outro para ativar a thread, como o exemplo abaixo:


private void menThread_Click(object sender, EventArgs e)

{

    thread = new Thread(new ThreadStart(run));

    thread.Start();

 

    label1.Visible = true;

    label1.Update();

    textBox1.Visible = true;

    textBox1.Update();

}

 

private void menSair_Click(object sender, EventArgs e)

{

    i = 201;

    thread = null;

    Application.Exit();

}

Setamos o valor 201 para a variável i e null para o objeto thread para forçar a thread parar. Caso você não force, a thread ficará executada até o fim do loop. Sempre pare uma thread para que sua aplicação não fique lenta.

Feito isso dê um build na aplicação e rode nosso exemplo de Thread. Simples e fácil!!!

Clique aqui e obtenha o exemplo.

Até a próxima…



Sobre o Autor

Este artigo foi escrito por Thiago César.
Thiago é desenvolvedor de aplicações Windows Mobile, J2ME, Web (ASP, ASP.NET). Para conversar com o autor use o e-mail, msn e gtalk tceufrasio@gmail.com.



Receba artigos em seu e-mail

Receba os novos artigos do blog em seu e-mail. E-Mail:



2 Comentários

  1. Raphael Saccomani:

    E ai Tiago, muito bom esse artigo cara!

    Parabens!!

  2. Thiago César:

    Opa Raphael!!!
    Obrigado pelo comentário e também obrigado por me passar algo sobre Thread!!!
    Passando e repassando!!! hehehe!! Abraço…

Deixe um comentário

blogarama.com Globe of Blogs EatonWeb Blog Directory