用更好的功能取代我的功能

时间:2013-09-11 14:51:19

标签: vb.net vb.net-2010

每次当前时间等于数据库中表格中的字段时,我都会尝试弹出一个msgbox,我正在使用以下代码:

For i As Integer = 0 To contentTable.Rows.Count() - 1
    UpdateListBoxRec2("Sending content " & i + 1 & " to :") 
    For j As Integer = 0 To subTable.Rows.Count() - 1
        While send = False
            If contentTable.Rows(i).Item(1) = DateTime.Now.ToString("hh:mm") Then
                UpdateListBoxRec2(subTable.Rows(j).Item(0))
                MsgBox(contentTable.Rows(i).Item(0))
                send = True
            End If
        End While
        'send = False
    Next
Next

这个方法有效,但是当调试器在while循环中时(意味着当前时间还不等于我在db表中的时间)我不能使用我的windows应用程序的任何工具直到调试器得到out while while循环所以我正在寻找一种类似的方法来在同样的条件下弹出我的msgbox并且能够一直在应用程序中使用我的工具

请注意我正在使用vb.net

任何帮助请:)

1 个答案:

答案 0 :(得分:2)

你永远不应该在UI线程中无限循环。只要UI线程忙,就会阻止它处理任何传入的窗口消息(例如击键,鼠标点击)。如果你在一个单独的线程上,你可以坐在这样的循环中,但那会很愚蠢。更合理的解决方案是使用计时器。例如,如果您将Timer组件放到设计器中的表单上,并将其Interval属性设置为5000(五秒),则可以添加以下代码:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    For i ...
        For j ...
            If contentTable.Rows(i).Item(1) = DateTime.Now.ToString("hh:mm") Then
                UpdateListBoxRec2(subTable.Rows(j).Item(0))
                MessageBox.Show(contentTable.Rows(i).Item(0))
            End If
        Next
    Next
End Sub

现在它将每五秒运行一次代码,而不是连续检查当前时间,从而占用UI线程。