在 VB.NET 中访问 DB 和计时器 - 当程序为 运行 且仅在启动时运行时不在 运行

Access DB and Timer in VB.NET - Not running when program is running and only runs upon startup

我遇到了一个提醒程序在该做某事时没有启动的问题。 看来我设置的计时器不会在后台 运行,并且只会在启动期间 运行 一次。 你能告诉我下面这段代码有什么问题吗? 我已经尝试过其他论坛无济于事,下面的这段代码在后台 运行 时根本不会 运行。 提醒将在预定时间之前显示。

 Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\rmd.mdb")

        Dim command As New OleDbCommand("select * from rmd1", connection)

        Dim recurr As Boolean
        Dim recurrweek As String
        Dim recurrdow As String
        Dim recurrby As String
        Dim reccurrmonth As String
        Dim active As Boolean
        Dim recurrmonthly As Boolean
        Dim recurrweekly As Boolean
        Dim recurrdaily As Boolean
        Dim monthofday As Integer


        connection.Open()

        Dim reader As OleDbDataReader = command.ExecuteReader()
        While reader.Read()
            recurr = reader(3)

        reccurrmonth = reader(2).ToString

            recurrby = reader(4).ToString
            recurrweek = reader(5).ToString
            active = reader(6)
            Select Case reccurrmonth
                Case 0
                    monthofday = 1
                Case 1
                    monthofday = 2
                Case 2
                    monthofday = 3
                Case 3
                    monthofday = 4
                Case 4
                    monthofday = 5
                Case 5
                    monthofday = 6
                Case 6
                    monthofday = 7
                Case 7
                    monthofday = 8
                Case 8
                    monthofday = 9
                Case 9
                    monthofday = 10
                Case 10
                    monthofday = 11
                Case 11
                    monthofday = 12
            End Select
            Select Case recurrweek
                Case 0
                    recurrdow = DayOfWeek.Sunday
                Case 1
                    recurrdow = DayOfWeek.Monday
                Case 2
                    recurrdow = DayOfWeek.Tuesday
                Case 3
                    recurrdow = DayOfWeek.Wednesday
                Case 4
                    recurrdow = DayOfWeek.Thursday
                Case 5
                    recurrdow = DayOfWeek.Friday
                Case 6
                    recurrdow = DayOfWeek.Saturday
                Case 7
                    recurrdow = Nothing


            End Select
            Select Case recurrby
                Case 0
                    recurrdaily = True
                    recurrmonthly = False
                    recurrweekly = False
                Case 1
                    recurrweekly = True
                    recurrdaily = False
                    recurrmonthly = False
                Case 2
                    recurrmonthly = True
                    recurrdaily = False
                    recurrweekly = False
            End Select


            Dim currentTime As TimeSpan = Date.Now.TimeOfDay


            Dim reminderTime As TimeSpan = reader.GetDateTime(reader.GetOrdinal("time")).TimeOfDay

            If reminderTime.Hours = currentTime.Hours AndAlso reminderTime.Minutes = currentTime.Minutes AndAlso reminderTime.Seconds = currentTime.Seconds Then
                If recurr = True Then

                    If active = True Then
                    Else
                        Exit Sub
                    End If

                    If recurrdaily = True Then

                    ElseIf recurrweekly = True Then
                        If Now.DayOfWeek = recurrdow Then

                        End If
                    ElseIf recurrmonthly = True Then
                        If Now.Month = monthofday Then

                        End If
                    Else
                        Exit Sub
                    End If

                ElseIf recurr = False Then
                    Exit Sub
                End If

                Me.TextBox1.Text += "Task:" + reader(1).ToString() + "Date:" + reminderTime.ToString + vbNewLine

                ReminderForm.PictureBox1.Image = Image.FromFile(reader(8).ToString)
                ReminderForm.lbltime.Text = reminderTime.ToString
                ReminderForm.Label1.Text = reader(1).ToString
                ReminderForm.Show()
                tmrrmd.Stop()
            End If




        End While

    End Using

计时器不适用于上面的代码。 谢谢

我已经尝试理顺代码了一点,但我仍然不知道您要做什么。带有空块的 If 语句没有意义。如果您想要与条件相反,请使用 Not。布尔值不需要 = True 或 False。它们是布尔值,将被这样计算。

Private Function GetData() As DataTable
    Dim dt As New DataTable
    Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\rmd.mdb"),
            command As New OleDbCommand("select * from rmd1", connection)
        connection.Open()
        Using reader = command.ExecuteReader()
            dt.Load(reader)
        End Using
    End Using
    Return dt
End Function

Private Sub OPCode()
    Dim dt = GetData()
     Dim recurr As Boolean
    Dim recurrweek As Integer
    Dim recurrdow As Integer
    Dim recurrby As Integer
    Dim reccurrmonth As Integer
    Dim active As Boolean
    Dim recurrmonthly As Boolean
    Dim recurrweekly As Boolean
    Dim recurrdaily As Boolean
    Dim monthofday As Integer
    Dim sb As New StringBuilder
      For Each row As DataRow In dt.Rows
        recurr = CBool(row(3))
        reccurrmonth = CInt(row(2))
        recurrby = CInt(row(4))
        recurrweek = CInt(row(5))
        active = CBool(row(6))
        Select Case reccurrmonth
            Case 0
                monthofday = 1
            Case 1
                monthofday = 2
            Case 2
                monthofday = 3
            Case 3
                monthofday = 4
            Case 4
                monthofday = 5
            Case 5
                monthofday = 6
            Case 6
                monthofday = 7
            Case 7
                monthofday = 8
            Case 8
                monthofday = 9
            Case 9
                monthofday = 10
            Case 10
                monthofday = 11
            Case 11
                monthofday = 12
        End Select
        Select Case recurrweek
            Case 0
                recurrdow = DayOfWeek.Sunday
            Case 1
                recurrdow = DayOfWeek.Monday
            Case 2
                recurrdow = DayOfWeek.Tuesday
            Case 3
                recurrdow = DayOfWeek.Wednesday
            Case 4
                recurrdow = DayOfWeek.Thursday
            Case 5
                recurrdow = DayOfWeek.Friday
            Case 6
                recurrdow = DayOfWeek.Saturday
            Case 7
                recurrdow = 0
        End Select
        Select Case recurrby
            Case 0
                recurrdaily = True
                recurrweekly= False
                recurrmonthly = False
            Case 1
                recurrdaily = False
                recurrweekly = True
                recurrmonthly = False
            Case 2
                recurrdaily = False
                recurrweekly = False
                recurrmonthly = True
        End Select
        Dim currentTime As TimeSpan = Date.Now.TimeOfDay
        Dim reminderTime As TimeSpan = CDate(row("time")).TimeOfDay
        If reminderTime.Hours = currentTime.Hours Then
            If recurr = True Then
                If Not active OrElse Not recurrdaily Then
                    Exit Sub
                End If
            Else
                Exit Sub
            End If
            sb.AppendLine($"Task:{row(1)}Date:{reminderTime}")
            ReminderForm.PictureBox1.Image = Image.FromFile(row(8).ToString)
            ReminderForm.lbltime.Text = reminderTime.ToString
            ReminderForm.Label1.Text =row(1).ToString
            ReminderForm.Show()
            tmrrmd.Stop()
        End If
    Next
    TextBox1.Text = sb.ToString
End Sub

编辑

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    OPCode()
End Sub