从自定义类中提升事件

时间:2011-11-14 16:32:39

标签: vb.net windows-services

我有一个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 个答案:

答案 0 :(得分:1)

再多一点测试,我就解决了。我试图在我的构造函数中引发事件,但由于它没有完成构造(?)类,处理程序在那时没有附加。所以现在我首先创建一个新对象,它为处理程序提供了一些东西,然后在该类中调用一个公共方法来完成我在类构造函数中所做的事情。现在处理程序已注册,它会在事件被引发时捕获它们。