首先,我已经阅读了很多关于此的内容,但无论如何我都没有得到可怕的答案。我知道我不应该从线程更新 UI,但在这种情况下,我认为这是唯一的方法。
我的应用程序发送大量电子邮件,比如说 500 封,为了避免应用程序过载,我使用线程来处理存储在 DDBB 中的信息。一切正常,我正在使用代表,我成功地通过客户端发送它们,但我希望应用程序在 MDI 表单标签中显示一条消息,内容类似于“电子邮件发送到:10:00:blabla@gmail.com: 00" 只是为了向用户显示该进程正在后台运行...
我的代码很简单:
- 来自 MDI:
BulkThread = 新线程(新线程开始(AddressOf ProcessBulkList))
BulkThread.Start()
- 从包含 ProcessBulkList 的模块中:
公共代表 Sub MySubPara(ByVal p As String)
公共子ProcessBulkList()
Dim DelegateMDI As MySubPara = New MySubPara(AddressOf MostrarEnMDI)
DelegateMDI.Invoke("example@gmail.com")
结束子
Public Sub MostrarEnMDI(para As String)
MDI.LabelSMS.Text = "Message sent to: " & para & " at " & GetTime()
MDI.Refresh()
结束子
当然,在 ProcessBulkList 函数中有更多的委托和东西,一切都很完美,但是这个调用,在 MDI 表单上没有显示任何内容......可能我使用的 MDI 是原始 MDI 的副本,但为什么????因为从线程使用调用应该使用调用主线程中元素队列的 SendMessage 函数,不是吗?