调用实体框架时System.Timers.Timer不会触发

时间:2012-12-17 09:54:46

标签: .net vb.net entity-framework windows-services

我有一个使用System.Timers.Timer实例在VB.NET中编写的Windows服务来执行一些定期任务。我刚刚使用实体框架4.3.1从.NET迁移到.NET 4.5。只要不使用实体框架,计时器的“elapsed”事件处理程序就会正常启动。使用实体框架时,事件处理程序不会触发。它只是,不会开火。没有抛出异常,没有事件日志消息,没有。使用.NET 4版本时没有发生这种情况。有人有任何建议吗?

Dim testTimer As New System.Timers.Timer

Protected Overrides Sub OnStart(ByVal args() As String)
    Try
        testTimer.Interval = 2 * 1000 * 60
        AddHandler testTimer.Elapsed, New System.Timers.ElapsedEventHandler(AddressOf TestTimerMethod)
        testTimer.Enabled = True
  Catch ex As Exception
        'A method logging the respective exception
        LogException(ex)
    End Try
End Sub

Protected Sub TestTimerMethod()
    Try
        testTimer.Enabled = False
        UtilitiesProvider.GetUtilitiesProvider.LogWriter.Write("Start of method")

        'If I remove the next line, the event handler is fired as it should be...
        Dim dbContext As New DASTADbContext

        'mock some time consuming tasks
        Dim i = 0
    Catch ex As Exception
        'Log the exception
        UtilitiesProvider.GetUtilitiesProvider.LogException(ex)
    Finally
        testTimer.Enabled = True
    End Try

End Sub

请注意以下事项: 1.我在x86模式下构建整个解决方案。我不知道这是否相关。 2.我使用VS2012构建 3.我使用日志消息以及调试附加到相应进程的整个服务来确认上述方案 4.我正在引用为运行时版.NET 4构建的Entity Framework 4.3.1

提前谢谢你, Pantelis Natsiavas

编辑:虽然这仍然是个问题,但我想我找到了谁应该受到责备。由于某些无法解释的原因,用于创建Windows服务安装项目的Installshield Limited Edition无法按预期工作。当我使用Windows服务的主要输出来创建安装项目时,由于一些无法解释的原因,Installshield LE添加了对使用Entity Framework 4的较旧且现在未使用的DLL的引用。我认为由于引用Entify Framework 4而发生了错误实体框架4.3同时。我已经同时切换到VS2012,.NET 4.5和InstallShield LE。因此,我错误地认为.NET 4.5应该受到指责。我认为这应该仍然被认为是一个错误,因为我从来没有得到异常或者某些东西表明我做错了什么。计时器,只是没有触发相应的事件处理程序(!)。

0 个答案:

没有答案