2011-11-14 2 views
2

특정 전자 메일이 도착하면 전자 메일 계정을 모니터링하고 SQL Server 데이터베이스에 항목을 입력하도록 설계된 Windows 서비스 프로젝트가 있습니다. 이것은 컴퓨터가 계정에 로그인해야하고 프로그램을 수동으로 시작해야한다는 점을 제외하고는 잘 작동하는 비슷한 winforms 프로그램을 다시 작성한 것입니다.이 프로그램은 서비스로 사용하지 않아도됩니다.맞춤 클래스에서 이벤트 제기하기

서비스에서 나는 기록 된 메시지 목록을 유지합니다. 기본적으로 문자열과 타임 스탬프가 표시되어 무언가가 발생했음을 나타냅니다. (이 목록은 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 프로그램에서 복제하면 모든 것이 제대로 작동합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 다른 클래스에서 발생한 이벤트를 처리하는 서비스는 어떻게 받습니까?

답변

1

조금 더 테스트를하고 해결했습니다. 내 생성자에서 이벤트를 발생 시키려고했지만 클래스 작성을 완료하지 않았기 때문에 처리기가 해당 지점에 연결되지 않았습니다. 이제 대신 새로운 객체를 먼저 생성합니다.이 객체는 핸들러에 무언가를 부여한 다음 클래스 생성자에서 수행 한 작업을 수행하는 public 클래스를 호출합니다. 핸들러가 등록되었으므로 이벤트가 발생하는대로 이벤트를 캐치합니다.

관련 문제