none
Timer + new thread + delegate + inserir dados em listbox = erro =/ RRS feed

  • Pergunta

  • Public Class Form1
    
    Dim TR As System.Threading.Thread
    Dim TM As New Timer
    
    Private Form1_Load(Byval sender As Objcet, Byval e As EventArs) MyBase.Load
    
    TM.Interval = 10000
    TM.Enabled = True
    TM.Start
    
    TR = New Threading.Thread(New Threading.ThreadStart(AddresOf Teste))
    
    Private Sub TM_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TM.Tick
    
    TM.Start()
    
    End Sub
    
    Dim x As Integer = 1
    
    Public Sub insert(ByVal msg As String)
    
    ListBox1.Items.Add(msg) ' aqui gera o erro
    
    End Sub
    
    Public Delegate Sub deleg(ByVal msg As String)
    
    Public Sub Teste()
    
    Dim delegg As deleg
    
    delegg = AddressOf insert
    delegg.Invoke(x)
    
         If x = 5 Then
            x = 0
         End If
    x += 1
    End Sub
    

    bom esse código eu fiz simplificado só pra mostrar mesmo a parte do erro,

    A mensagem de erro é :

    Operação entre threads inválida: controle 'ListBox1' acessado de um thread que não é aquele no qual foi criado.

    vlw pela atençao ^^


    AleSaggiorato

    segunda-feira, 14 de janeiro de 2013 16:42

Respostas

  • Tenta com o Begin.Invoke:

    'ListBox1.Items.Add(msg) ' aqui gera o erro
    'Substitui por
            ListBox1.BeginInvoke(New MethodInvoker(AddressOf AdicionarItens))

    AdicionarItens:

        Private Sub AdicionarItens()
            ListBox1.Items.Add("Teste")
        End Sub


    • Editado MarceloSchneider segunda-feira, 14 de janeiro de 2013 17:50
    • Marcado como Resposta AleSaggiorato segunda-feira, 14 de janeiro de 2013 18:10
    segunda-feira, 14 de janeiro de 2013 17:50

Todas as Respostas

  • Tenta com o Begin.Invoke:

    'ListBox1.Items.Add(msg) ' aqui gera o erro
    'Substitui por
            ListBox1.BeginInvoke(New MethodInvoker(AddressOf AdicionarItens))

    AdicionarItens:

        Private Sub AdicionarItens()
            ListBox1.Items.Add("Teste")
        End Sub


    • Editado MarceloSchneider segunda-feira, 14 de janeiro de 2013 17:50
    • Marcado como Resposta AleSaggiorato segunda-feira, 14 de janeiro de 2013 18:10
    segunda-feira, 14 de janeiro de 2013 17:50
  • vlw , resolveu o problema ;)

    AleSaggiorato

    segunda-feira, 14 de janeiro de 2013 18:10