【问题标题】:Thread.Sleep () with Timer for scheduleThread.Sleep() 与 Timer 进行调度
【发布时间】:2019-03-27 06:19:07
【问题描述】:

我有一个可以根据设定的时间表运行的选项案例。因此,我编写了下面提供的代码。

Private WithEvents tmr_Imp_Pms_File As New Timers.Timer(950) 'for PMS File

Private Sub tmr_Imp_Pms_File_Elasped(ByVal sender As System.Object, ByVal e As Timers.ElapsedEventArgs) Handles tmr_Imp_Pms_File.Elapsed

Thread.Sleep(50)

     Select Case .Enable_Schedule
                Case 1 ' Schedule - Daily Option
                    If .Enable_Daily_Option_1 = 1 Then
                        If _
                            TimeSerial(Now.Hour, Now.Minute, Now.Second) =
                            TimeSerial(.Daily_Option_1_Time.Hour, .Daily_Option_1_Time.Minute,
                                       .Daily_Option_1_Time.Second) Then

                            logger.log.Info("Checking Running Daily Schedule Option 1, " & Now.ToString)

                        End If
                    End If


                    If .Enable_Daily_Option_2 = 1 Then
                        If _
                            TimeSerial(Now.Hour, Now.Minute, Now.Second) =
                            TimeSerial(.Daily_Option_2_Time.Hour, .Daily_Option_2_Time.Minute,
                                       .Daily_Option_2_Time.Second) Then

                            logger.log.Info("Checking Running Daily Schedule Option 2, " & Now.ToString)

                        End If
                    End If


                    If .Enable_Daily_Option_3 = 1 Then
                        If _
                            TimeSerial(Now.Hour, Now.Minute, Now.Second) =
                            TimeSerial(.Daily_Option_3_Time.Hour, .Daily_Option_3_Time.Minute,
                                       .Daily_Option_3_Time.Second) Then

                            logger.log.Info("Checking Running Daily Schedule Option 3, " & Now.ToString)

                        End If
                    End If
     End Select

        End Sub

在这里我有 3 个计划选项,我启用了所有 3 个计划以让我的程序运行。但是有一个随机且很少发生的问题,程序将跳过第二个选项运行。我相信这与下面显示的这部分有关。

 " TimeSerial(Now.Hour, Now.Minute, Now.Second) =
                        TimeSerial(.Daily_Option_1_Time.Hour, .Daily_Option_1_Time.Minute,
                                   .Daily_Option_1_Time.Second) Then"

如何增强这段代码来解决问题? 还有其他方法可以编写代码吗? “我知道有……”但是有人可以给我一些处理这个问题的更好方法的例子吗?

感谢您的帮助,提前致谢。

【问题讨论】:

    标签: asp.net .net vba vb.net thread-sleep


    【解决方案1】:

    我找到了答案,下面是解决问题的方法。

           Private WithEvents tmr_Imp_Pms_File As New Timers.Timer(950) 'for PMS File
    
           Private Sub tmr_Imp_Pms_File_Elasped(ByVal sender As System.Object, ByVal e As Timers.ElapsedEventArgs) Handles tmr_Imp_Pms_File.Elapsed
    
                Select Case .Enable_Schedule
                           Case 1 ' Schedule - Daily Option
                               If .Enable_Daily_Option_1 = 1 Then
                                   If _
                                       TimeSerial(Now.Hour, Now.Minute, Now.Second) =
                                       TimeSerial(.Daily_Option_1_Time.Hour, .Daily_Option_1_Time.Minute,
                                                  .Daily_Option_1_Time.Second) Then
    
    
                                   logger.log.Info("Daily Schedule Option 2 Hit, " & Now.ToString("HH:mm:ss.fff"))
    
                                   tmr_Imp_Pms_File.Stop() : Thread.Sleep(50)
    
                                   End If
                               End If
    
    
                               If .Enable_Daily_Option_2 = 1 Then
                                   If _
                                       TimeSerial(Now.Hour, Now.Minute, Now.Second) =
                                       TimeSerial(.Daily_Option_2_Time.Hour, .Daily_Option_2_Time.Minute,
                                                  .Daily_Option_2_Time.Second) Then
    
    
                                   logger.log.Info("Daily Schedule Option 2 Hit, " & Now.ToString("HH:mm:ss.fff"))
    
                                   tmr_Imp_Pms_File.Stop() : Thread.Sleep(50)
    
                                   End If
                               End If
    
    
                               If .Enable_Daily_Option_3 = 1 Then
                                   If _
                                       TimeSerial(Now.Hour, Now.Minute, Now.Second) =
                                       TimeSerial(.Daily_Option_3_Time.Hour, .Daily_Option_3_Time.Minute,
                                                  .Daily_Option_3_Time.Second) Then
    
    
                                   logger.log.Info("Daily Schedule Option 2 Hit, " & Now.ToString("HH:mm:ss.fff"))
    
                                   tmr_Imp_Pms_File.Stop() : Thread.Sleep(50)
    
                                   End If
                               End If
                End Select
    
                   End Sub
       ```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-28
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2010-11-27
      相关资源
      最近更新 更多