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 :
Imports System.Threading
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 trd As Thread
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: