none
Como controlar un label de un Formulario a travez del método de un Hilo

    Pregunta

  • Buenas estoy construyendo un juego y me tira un error al querer mostrar el tiempo en un label

    lo que llevo es esto, Esta parte de codigo está al finalizar de crear mi tablero para que empiece a correr el tiempo

         Try
                Dim n As Integer = CInt(txttiempo.Text)
                tiempo = n
                Dim demoThread As Thread
                demoThread = New Thread(New ThreadStart(AddressOf Me.TiempoJuego))
                demoThread.Start()
            Catch ex As Exception
                MsgBox("Tiempo invalido")
            End Try

    ________________________________________________________________________________________

    Y este es el metodo donde voy mostrando el tiempo

        Public Sub TiempoJuego()
            For i = 0 To Me.tiempo
                Me.lbltiempo.Text = Me.tiempo.ToString
                Me.tiempo = Me.tiempo - 1
                Me.lbltiempo.Refresh()
                Thread.Sleep(1000)
            Next

    pero al querer llamar a mi label me sale este error

    Operación no válida a través de subprocesos: Se tuvo acceso al control 'lbltiempo' desde un subproceso distinto a aquel en que lo creó.

    sábado, 15 de octubre de 2016 22:03

Respuestas

  • Hola UsacKoka

    Podrías hacerlo por medio de un delegado, creando um metodo:

    Delegate Sub SetLabelTiempoTextInvoker(ByVal TextoMostrar As String)
    
        Public Sub SetLabelTiempo(ByVal TextoMostrar As String)
            If lblTiempo.InvokeRequired Then
                lblTiempo.Invoke(New SetLabelTiempoTextInvoker(AddressOf SetLabel1Text), New Object() {TextoMostrar })
            Else
                lblTiempo.Text = TextoMostrar 
            End If
        End Sub
    
    Public Sub TiempoJuego()
    
       For i = 0 To Me.Tiempo
         SetLabelTiempo(Me.tiempo.ToString)
         Me.tiempo = Me.Tiempo - 1
         Thread.Sleep(1000)
       Next
    
    End Sub

    Suerte y sludos

     

    Javier

    domingo, 16 de octubre de 2016 2:24