У меня есть проект службы Windows, предназначенный для мониторинга учетной записи электронной почты и внесения записей в базу данных SQL Server при поступлении определенных сообщений электронной почты.Это переписывание аналогичной программы winforms, которая работает просто отлично, за исключением того, что она требует, чтобы компьютер вошел в учетную запись и программа запустилась вручную, чего я могу избежать, используя его в качестве службы.
Inслужба, которую я поддерживаю в списке зарегистрированных сообщений - в основном, это просто строка и отметка времени, указывающая, что что-то произошло.(Этот список распространяется через службу WCF, но я думаю, что это несущественно, по крайней мере, на данный момент.) В моем пользовательском классе я объявляю публичное событие, а в другом месте я поднимаю это событие.Однако по какой-то причине RaiseEvent
не запускается в службе.Например:
Public Class TheService
Private WithEvents _pc As ProcessorClass
Public Sub OnStart(ByVal args() As String)
_pc = New ProcessorClass
End Sub
...
Private Sub _pc_HandleEvent(LogMessage As String) Handles _pc.CustomEvent
'do something with the LogMessage
End Sub
End Class
Public Class ProcessorClass
Public Event CustomEvent(ByVal LogMessage As String)
...
Public Sub Process()
'Do stuff
RaiseEvent CustomEvent("Event raised")
End Sub
End Class
Проблема в этом случае в том, что _pc_HandleEvent
никогда не вызывается.Если я продублирую эту настройку в обычной программе winform, все будет работать как надо.Что я делаю неправильно?Как получить сервис для обработки событий, вызванных другими классами?