dgonzale Ответов: 1

Вызов более 1 подпрограммы из события timer. elapsed


Эта служба windows будет каждую минуту проверять наличие ожидающих обработки записей, один раз для тестового сайта и один раз для производственного сайта; у меня есть только 1 подпрограмма с параметром, указывающим, используется ли тестовый сайт для правильной строки подключения SQL.

Я использую прошедшее событие для вызова подпрограммы 2 раза, но только первый из них вызывается или обрабатывается.

Что я уже пробовал:

Пожалуйста, смотрите код ниже, он только добавляет запись журнала событий и вызывает CheckPendingiMacros(False), затем он выходит из обработчика событий.

Private Shared iMacrosExecuterTimer As Timers.Timer

    Protected Overrides Sub OnStart(ByVal args() As String)
        'Initiate and set timer
        iMacrosExecuterTimer = New Timers.Timer
        iMacrosExecuterTimer.Interval = 10000 '10 seconds so it start immediately after it gets enabled, then it will be called every minute
        AddHandler iMacrosExecuterTimer.Elapsed, AddressOf OnTimedEvent
        iMacrosExecuterTimer.AutoReset = False
        iMacrosExecuterTimer.Start()
    End Sub 'OnStart

    Protected Overrides Sub OnStop()
    End Sub 'OnStop

    Private Sub OnTimedEvent(source As Object, e As System.Timers.ElapsedEventArgs)
        iMacrosExecuterEventLog.WriteEntry("OnTimedEvent: S T A R T E D", EventLogEntryType.Information) 'added for testing purposes
        'Testing Site
        CheckPendingiMacros(True)

        'Production Site
        CheckPendingiMacros(False)
        iMacrosExecuterEventLog.WriteEntry("OnTimedEvent: E N D E D", EventLogEntryType.Information) 'added for testing purposes

        'Re-Start the service again
        iMacrosExecuterTimer.Interval = 60000
        iMacrosExecuterTimer.Start()
    End Sub

    Private Sub CheckPendingiMacros(ByVal TestingSite As Boolean)
        'Set log entry to identify if running for the TestingSite or Production site
        iMacrosExecuterEventLog.WriteEntry(IIf(TestingSite, "Check Pending iMacros on:" & vbCr & "*** TestingSite Site ***", "Check Pending iMacros on:" & vbCr & "--- Production Site ---"), EventLogEntryType.Information)

Alan N

Является ли исключение, вызванное CheckPendingiMacros(true)? Код Microsoft, вызывающий делегат обработчика событий, проглатывает исключения, и ваш собственный захват исключений в обработчике событий выявит любые проблемы.

dgonzale

Ну, он выполняет процесс с любым параметром (True или False), я использую раздел Try Catch с записью eventlog, созданной в случае возникновения ошибки, но никаких ошибок не фиксируется.

dgonzale

Я не знаю, как отлаживать службу, поэтому добавлю несколько записей событий, указывающих на конец каждого процесса, как вы сказали, это может быть ошибка, и я ее не вижу.

1 Ответов

Рейтинг:
2

dgonzale

Произошла ошибка, я приложил OnStart на Try Catch и смог определить проблему. Спасибо!