for 循环完成时的计时器滴答声



for循环完成时,如何勾选计时器?我不想每 X 分钟运行一次计时器,我想在单击按钮时运行计时器,然后在 for 循环完成后再次勾选计时器。

 For Each row As DataRow In MTProcessTable.Rows
  Try
            If checkKeyHelp(process.datain) Then
                msg = msgTable.Rows(1)(1).ToString()
                MsgBox(msg)
                writeMsg("1 MO help at ")
            ElseIf checkKeyInfo(process.datain) Then
                msg = msgTable.Rows(4)(1).ToString()
                MsgBox(msg)
                writeMsg("1 MO INFO at ")
            Else
                MOTable = selectMO(process.mo, process.mt)
                moRowNb = MOTable.Rows.Count()
                MO = New MO_class
                If moRowNb <> 0 Then
                    MOrow = MOTable.Rows(0)
                    MO.newuser = MOrow("newuser")
                    MO.sim_id = MOrow("sim_id")
                End If
       Catch ex As Exception
            logFile("executeTimer ----" & ex.Message)
            updateProcessed(process.id, ex.Message)
        Finally
            updateProcessed(process.id, msg)
        End Try
 Next row
Private Sub start_btn_Click(sender As System.Object, e As System.EventArgs) Handles start_btn.Click
    Timer1.Enabled = True
    tm.StartTimer()
End Sub

根据您的评论,听起来您想编写一个程序来选择数据并对其进行处理。完成后,您希望通过选择新数据并处理该数据等来重新开始该过程。

如果你想使用计时器,我会这样设置它。它将使用一些共享项目来启动或停止运行子的计时器。一个问题是,当它运行时,程序将无响应。您唯一可以"停止"程序的时间是在两次运行之间。我将线程之间的时间设置为 10 秒(10000 毫秒),但您可以使用任何值。

Imports System.Windows.Forms.Timer
Public Class Form1

    Private Sub RunProcess()
        'Add code to populate datatable
        For Each row As DataRow In MTProcessTable.Rows
            Try
                If checkKeyHelp(Process.datain) Then
                    msg = msgTable.Rows(1)(1).ToString()
                    MsgBox(msg)
                    writeMsg("1 MO help at ")
                ElseIf checkKeyInfo(Process.datain) Then
                    msg = msgTable.Rows(4)(1).ToString()
                    MsgBox(msg)
                    writeMsg("1 MO INFO at ")
                Else
                    MOTable = selectMO(Process.mo, Process.mt)
                    moRowNb = MOTable.Rows.Count()
                    MO = New MO_class
                    If moRowNb <> 0 Then
                        MOrow = MOTable.Rows(0)
                        MO.newuser = MOrow("newuser")
                        MO.sim_id = MOrow("sim_id")
                    End If
                End If
            Catch ex As Exception
                logFile("executeTimer ----" & ex.Message)
                updateProcessed(Process.Id, ex.Message)
            Finally
                updateProcessed(Process.Id, msg)
            End Try
        Next row
        Timer1.Enabled = True
    End Sub
    Private Timer1 As Timer 'Create timer
    Sub Timer1_Tick() 'Handle timer tick
        Timer1.Enabled = False
        RunProcess()
    End Sub
    Private blRunning As Boolean
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1 = New Timer 'Create instance of timer
        Timer1.Interval = 10000 'Time in MS before starting next process
        AddHandler Timer1.Tick, AddressOf Timer1_Tick 'Add tick handler to timer
        Timer1.Enabled = blRunning 'Enable/disable timer
    End Sub
    Private Sub start_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles start_btn.Click
        If blRunning = True Then
            blRunning = False
            start_btn.Text = "Start"
        Else
            blRunning = True
            start_btn.Text = "Stop"
        End If
        Timer1.Enabled = blRunning
    End Sub
End Class

最新更新