電子メールアカウントを監視し、特定の電子メールが到着したときにSQL ServerデータベースにエントリするWindowsサービスプロジェクトがあります。これは、コンピュータをアカウントにログインさせ、プログラムを手動で起動する必要があることを除いて、正常に動作する同様のwinformsプログラムを書き直したものです。これをサービスとして使用することで回避できます。カスタムクラスからイベントを呼び出す
サービスでは、ログに記録されたメッセージのリストを保持しています。基本的には文字列とタイムスタンプで、何かが発生したことを示しています。 (そのリストはWCFサービス上で共有されていますが、少なくとも現時点ではそれは重要ではないと思います)。私のカスタムクラスでは公開イベントを宣言しています。ただし、何らかの理由でがサービスで実行されていません。例:
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プログラムでこの設定を複製すると、すべてが正常に動作するようになります。私は間違って何をしていますか?他のクラスから発生したイベントを処理するサービスを取得するにはどうすればよいですか?