Trabalhando com MultiThreads no VB.NET


MultiThreads ???

Meu Deus !!! O que é isto ????

Calma !!!

O termo MultiThread define a capacidade de se executar múltiplos processos ao mesmo tempo de forma independente. Ou seja você executa duas tarefas (assobiar e chupar cana) ao mesmo tempo e uma tarefa não depende da outra para ser executada.

Vamos dar um exemplo para clarear : Suponha que você queira carregar um controle ListView com os dados de uma tabela e que ao mesmo tempo queira também preencher o conteúdo de uma Combobox com os dados de outra tabela , bem se conseguir realizar tal proeza ao mesmo tempo e de forma independente você esta realizando um processamento MultiThread.

Ora , ora você pode estar pensando com os seus botões que o VB6.0 suporta o processamento MultiThread ... Mas eu lhe digo que esta enganado , na verdade quando você tenta fazer tal tarefa usando o VB 6.0 a tarefa é feita sequencialmente ; só que a coisa é tão rápido (se a tabela tiver poucos registros) que parece , eu disse parece que as tarefas são realizadas simultaneamente...O que o VB6.0 faz é executar múltiplos apartamentos dentro de um único processo.

No VB.NET a multiTarefa (MultiThread) é uma realidade , ou seja , podemos ter múltiplos processos paralelos que podem acessar o mesmo conjunto de dados compartilhados. Vamos usar um exemplo prático no VB.NET para mostrar que estamos falando a verdade. Vamos criar um aplicativo que executa um processamento paralelo em segundo plano usando o recurso das Threads.

Criando uma aplicação VB.NET com Threads

Vamos arregaçar as mangas :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

               MessageBox.Show("Esta é a Thread principal")

End Sub

Private Sub ThreadTask()
    Dim stp As Integer
    Dim newval As Integer
    Dim rnd As New Random()

    Do
        stp = ProgressBar1.Step * rnd.Next(-1, 2)
        newval = ProgressBar1.Value + stp
        If newval > ProgressBar1.Maximum Then
            newval = ProgressBar1.Maximum
        ElseIf newval < ProgressBar1.Minimum Then
            newval = ProgressBar1.Minimum
        End If

        ProgressBar1.Value = newval

        Thread.Sleep(100)
    Loop
End Sub

Este código cria um loop infinito que incrementa ou decrementa de forma aleatória o valor da Progressbar1 e então espera por 100 milisegundos para continuar.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

   trd = New Thread(AddressOf ThreadTask)

   trd.IsBackground = True

   trd.Start()

End Sub

Ao executar o projeto o valor da barra de progresso irá ficar oscilando ,  ora aumentando ora diminuindo , se você clicar no botão controle Button , a mensagem : "Esta é a Thread Principal" será exibida e mesmo assim o processamento dos valores para a barra de progresso vai continuar ocorrendo. Você pode ficar testando isto por muito tempo ....

Vamos explicar o que esta acontecendo. Veja o código abaixo:

trd = New Thread(AddressOf ThreadTask)
trd.IsBackground = True
trd.Start()

Os recursos para usar Threads estão no NameSpace System.Threads que importamos no inicio do projeto.

A primeira linha cria um instância do objeto thread(trd) , o operador AddressOf é usado para criar um objeto delegate para a procedure ThreadTask , ou seja , ele aponta para o procedimento. Após isto basta executar a Thread usando o método Start.(Para parar uma Thread usamos o método abort: trd.abort().)

O método Sleep usado tem o objetivo de interromper a execução de uma thread por um período de tempo.

Assim : Thread.Sleep(100) indica que a thread vai dar uma pausa de 100 milisegundos.

Ponto Final. Até a próxima...  ( Adaptado da MSDN - HOW TO: Create a Thread by Using Visual Basic .NET -(Q315577))

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti