从另一个类线程修改标签表单

时间:2012-05-02 04:42:11

标签: .net vb.net visual-studio visual-studio-2008

我使用线程发送电子邮件。 我需要在标签中写文字,以便用户知道何时以预算形式发送电子邮件。

'选项严格关闭

课堂表格上的功能。

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“

1 个答案:

答案 0 :(得分:0)

我没有在我面前提供详细信息,但您需要检查lblIconos.InvokeRequired中的ChangeLblTextInvoke当真实时委托调用本身。

This questionmany others like it提供了更多详细信息。