会请求以下帮助。在此先感谢:
我正在尝试使用vb.Net中的MailKit Imap客户端创建一个邮件客户端。 Mailkit Imap客户端处于空闲模式,当新邮件到达时,它会引发一个自己的线程中的事件。
现在,当我想将这些电子邮件存储在数据库中时,我希望不在该线程中进行处理,而是在我父类的线程中进行。我如何实现这一目标?我知道InvokeRequired和Invoke可以在Form Controls上完成,但这不是一个表单,它是一个类。
例如:代码是:
我的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
'Retreieve the messages and store them in DB
End Sub
End Class
答案 0 :(得分:0)
您可以使用AddHanlder
使用一个简单的例子。正在举办活动的班级:
Public Class ClassDoingWork
Public Event NewMessage()
Public Sub DoWork()
RaiseEvent NewMessage()
End Sub
End Class
使用此worker类的类,在新线程上调用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