需要以下帮助。预先感谢。
我正在尝试使用vb.Net中的MailKit Imap客户端制作邮件客户端。 Mailkit Imap客户端处于空闲模式,当新邮件到达时,它将引发一个事件,该事件位于其自己的线程中。
现在,当我要将这些电子邮件存储在数据库中时,我不想在该线程中而是在父类的线程中进行该处理。我该怎么做?我知道InvokeRequired和Invoke可以在窗体控件上完成,但这不是窗体,而是一个类。
例如:代码为:
我的ImapMonitor类具有这样的事件:
Class ImapMonitor
Private Sub rFolder_MessageArrived(sender as object, e as MailkitMessagesArrivedEventArgs) handles rfolder.MessagesArrived
RaiseEvent NewMessages(param1,param2)
End Sub
End Class
Class MailChecker
'My Main class which creates an object of ImapMonitor class goes :
Dim withevents iMonitor as ImapMonitor
Private Sub iMonitor_NewMessages(param1,param2) handles ImapMonitor.NewMessages 'this event is not in MailCheckers thread
'Retrieve the messages and store them in DB
End Sub
End Class
您可以使用AddHanlder
手动分配处理程序>
使用一个简单的例子。引发事件的类:
Public Class ClassDoingWork Public Event NewMessage() Public Sub DoWork() RaiseEvent NewMessage() End Sub End Class
和一个使用此工作程序类的类,在新线程上调用
DoWork
并订阅NewMessage
事件:
Public Class ClassMonitoringThread
Public Sub New()
Dim workerThread As New ClassDoingWork
AddHandler workerThread.NewMessage, AddressOf NewMessageEvent
Dim thr As New Thread(Sub() workerThread.DoWork())
thr.Start()
End Sub
Public Sub NewMessageEvent()
MessageBox.Show("New Message")
End Sub
End Class