我使用线程发送电子邮件。 我需要在标签中写文字,以便用户知道何时以预算形式发送电子邮件。
'选项严格关闭
课堂表格上的功能。
Public Sub ChangeLblText(ByVal msg As String) ' LblIconos.modifiers = public (In form)
lblIconos.Text = msg
End Sub
新线程的声明类。 (全球宣布。)
Public TasksPresu As New TasksClassPresu()
表单“Presupuestos”的图标触发线程
Dim Thread1 As New System.Threading.Thread(AddressOf TasksPresu.TaskEmail)
Thread1.Start()
类触发线程
Public Class TasksClassPresu
Sub TaskEmail()
'trigger label change?
Presupuestos.ChangeLblText("Test")
end sub
End Class
我尝试了Invoke metods,委托函数和没有工作的地址,可能是我留下的东西。
我使用的示例代理:
Form Presupuestos类:
Public Delegate Sub LabelDelegate(ByVal Msg As String)
在Global Module中声明大多数变量
Public Llamada As Presupuestos.LabelDelegate
课堂表格上的功能。
Public Sub ChangeLblText(ByVal msg As String) ' LblIconos.modifiers = public (In form)
lblIconos.Text = msg
End Sub
班级触发
Public Class TasksClassPresu
Sub TaskEmail()
Llamada.Invoke("prueba")
End Sub
End Class
运行时,在此行中出错:lbliconos.text = msg 错误:“通过线程非法操作。它可以从创建的线程以外的线程访问控件”lbliconos“
答案 0 :(得分:0)
我没有在我面前提供详细信息,但您需要检查lblIconos.InvokeRequired
中的ChangeLblText
和Invoke
当真实时委托调用本身。
This question和many others like it提供了更多详细信息。