2011-11-14 60 views
2

我有一個Windows服務項目,旨在監視電子郵件帳戶,並在某些電子郵件到達時向SQL Server數據庫創建條目。這是一個類似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

只是多一點測試,我解決了它。我試圖在我的構造函數中引發事件,但由於它尚未完成構造(?)類,因此處理程序在此時未附加。所以現在我首先創建一個新的對象,它給了處理器一些東西來抓取,然後在那個類中調用一個公開的方法,這個方法完成了我在類構造器中所做的事情。現在處理程序已經註冊,它捕獲事件引發的事件。