1

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

' Option Strict 关闭

课堂形式上的功能。

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

我在没有工作的情况下尝试了调用方法、委托函数和表单地址,可能是我留下了一些东西。

我使用的一个示例委托:


在 Form Presupuestos 类中:

Public Delegate Sub LabelDelegate(ByVal Msg As String)

在全局模块中声明大部分变量

 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””

4

1 回答 1

0

我没有摆在我面前的详细信息,但是您需要签到lblIconos.InvokeRequiredChangeLblText并且当属实时,Invoke代表会自行调用。

这个问题,以及许多其他类似的问题,提供了更多细节。

于 2012-05-02T06:50:09.340 回答