【发布时间】:2013-07-16 17:38:39
【问题描述】:
首先,我已经阅读了很多关于此的内容,但无论如何我都没有得到该死的答案。我知道我不应该从线程更新 UI,但在这种情况下,我认为这是唯一的方法。
我的应用程序发送大量电子邮件,比如说 500 封,为了避免应用程序过载,我使用线程来处理存储在 DDBB 中的信息。一切正常,我正在使用代表,我成功地通过客户端发送它们,但我希望应用程序在 MDI 表单标签中显示一条消息,内容类似于“电子邮件发送到:blabla@gmail.com 在 10:00: 00" 只是为了向用户显示进程正在后台运行...
我的代码很简单:
- 来自 MDI:
BulkThread = 新线程(New ThreadStart(AddressOf ProcessBulkList))
BulkThread.Start()
- 来自包含 ProcessBulkList 的模块:
Public Delegate 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函数,不是吗??
【问题讨论】:
标签: multithreading