每次当前时间等于数据库中表格中的字段时,我都会尝试弹出一个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
任何帮助请:)
答案 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线程。