He estado tratando de entender esto por unos días y me pregunto si es algo simple que me falta o que estoy haciendo completamente mal.VB.NET Multithreading. Invocar invocación en un control de UI desde una clase en un archivo de clase separado
Ejemplo: dos archivos - TestClass.vb, myForm.vb
TestClass.vb se ve de la siguiente manera:
Imports System.Threading
Public Class TestClass
Private myClassThread As New Thread(AddressOf StartMyClassThread)
Public Sub Start()
myClassThread.Start()
End Sub
Private Sub StartMyClassThread()
myForm.Msg("Testing Message")
End Sub
End Class
myForm.vb es una forma básica con una control de cuadro de lista y un botón de control con el nombre respectivamente Output y StartButton. El código detrás de la forma es la siguiente:
Public Class myForm
Private classEntity As New TestClass
Private Sub StartButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles StartButton.Click
Msg("Start Button Pressed")
classEntity.Start()
End Sub
Delegate Sub MsgCallBack(ByVal mesg As String)
Public Sub Msg(ByVal mesg As String)
If Output.InvokeRequired Then
MsgBox("Invoked")
Dim d As New MsgCallBack(AddressOf Msg)
Invoke(d, New Object() {mesg})
Else
MsgBox("Not Invoked")
mesg.Trim()
Output.Items.Add(mesg)
End If
End Sub
End Class
El resultado:
ejecuta la aplicación, no hay errores o excepciones. que se muestra es el cuadro de lista y el botón Inicio. Presiono el botón de inicio y un msgbox dice "No invocado" como se esperaba y al hacer clic en Aceptar para ese msgbox se agrega "Botón de inicio presionado" al control de cuadro de lista de Salida. Inmediatamente después de que el msgbox aparece de nuevo y dice "No invocado". Esperaba "invocado" ya que un hilo separado está tratando de usar el control de cuadro de lista de salida. Por supuesto, esto da como resultado que se intente Output.Items.Add, lo que no da como resultado resultados visibles, ya que el hilo no puede actualizar directamente el control de la IU.
Debo haber leído un libro pequeño con diferentes páginas tratando de entender completamente las caídas y los métodos, pero creo que puedo haber caído en una trampa que muchas personas pueden hacer. Con mi comprensión y conocimiento actuales, no puedo salir de esa trampa y agradecería cualquier aporte o consejo.
Saludos cordiales,
Lex
Soumya92 - ¡Perfecto! Muchas gracias. Voy a 'votar' tan pronto como lo permita la reputación. – Lecronox