Вызов более 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
Я не знаю, как отлаживать службу, поэтому добавлю несколько записей событий, указывающих на конец каждого процесса, как вы сказали, это может быть ошибка, и я ее не вижу.