Ferramentas de Utilizador

Ferramentas de Site


dev_net:vb.net:aceder_com_outro_thread

Como aceder a um controlo através de outro Thread

Quem já utilizou Multi-Threading de certeza que já se deparou com este problema, este artigo mostra como correr um ciclo através de outro Thread e colocar os valores numa ListBox que está num formulário na Thread principal.

Para isso vamos precisar de um Delegate

Private Delegate Sub AdicionarItemsDelegate(ByVal Texto As String)

E também de um procedimento que irá inserir os itens na ListBox

Private Sub AdicionarItems(ByVal Texto As String)
    'Adiciona o item à listbox
    ListBox1.Items.Add(Texto)
    'Posiciona o cursor no ultimo registo
    ListBox1.SelectedIndex = ListBox1.Items.Count - 1
End Sub

Dentro do evento DoWork do BackgroudWorker colocamos o nosso ciclo

Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    For i = 1 To 100
        'Chama o Delegate
        ListBox1.Invoke(New AdicionarItemsDelegate(AddressOf AdicionarItems), String.Format("Item {0} de {1}", i, 100))
        'Atrasa o processo
        Threading.Thread.Sleep(50)
    Next
End Sub

Finalmente só falta iniciar o processo

Private Sub BtnIniciar_Click(sender As System.Object, e As System.EventArgs) Handles BtnIniciar.Click
    'Inicia  processo
    BackgroundWorker1.RunWorkerAsync()
End Sub

Autoria

Escrito por Caça

dev_net/vb.net/aceder_com_outro_thread.txt · Esta página foi modificada pela última vez em: 2018/05/14 21:37 (Edição externa)