1

每次当前时间等于数据库中表中的字段时,我都尝试弹出一个 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 应用程序的任何工具,直到调试器退出while 循环,所以我正在寻找一种类似的方法来在相同的条件下弹出我的 msgbox,并且能够一直在应用程序中使用我的工具

请注意,我正在使用 vb.net

请提供任何帮助:)

4

1 回答 1

2

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

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 线程。

于 2013-09-11T15:09:55.627 回答