1

将请求以下帮助。提前致谢。

我正在尝试在 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
4

1 回答 1

0

您可以使用手动分配处理程序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
于 2015-08-26T11:21:34.503 回答