我有以下代码:
Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim mesaj As New Integer
My.Computer.Network.DownloadFile("http://rotutorial.net/anunt.txt", "c:\classmate\msg1.txt", "", "", False, 60000, True)
Dim readtext As New System.IO.StreamReader("c:\classmate\msg1.txt")
Dim text As String
text = readtext.ReadToEnd
readtext.Close()
Dim parti(10) As String
parti = text.Split("_")
Dim writetext1 As New System.IO.StreamReader("c:\classmate\msg.txt")
Dim text1 As String
Dim parti1(10) As String
text1 = writetext1.ReadToEnd
parti1 = text1.Split("_")
writetext1.Close()
Dim unic As New Integer
unic = Val(parti(0))
Dim unic1 As New Integer
unic1 = Val(parti1(0))
If unic <> unic1 Then
If unic <> unic1 Then
mesaj = MsgBox(parti(3), vbYesNo, "Mesaj")
End If
Dim writetext2 As New System.IO.StreamWriter("c:\classmate\msg.txt")
Dim text2 As String
text2 = text & "/" & text1
writetext2.Write(text2)
writetext2.Close()
Timer1.Enabled = False
Timer1.Enabled = True
End If
Timer1.Enabled = False
Timer1.Enabled = True
End Sub
定时器间隔设置为5000(5秒),但每次定时器正在滴答时,msgbox会出现在屏幕上,但文件msg.txt中却会写入一次。因此,计时器检查unic1是否与unic1不同,如果不同则显示一个msg框,并且它正在msg.txt中写入新行,但是在下一个计时器时,即使unic1和unic1等于msgbox无论如何都会出现,但它更有趣,因为它不会再次在文件中写入,只会显示msgbox。我不明白这一点。
抱歉我的英语不好,我来自罗马尼亚。
谢谢!
答案 0 :(得分:2)
如果在错误的地方使用正确的原因,消息框可能有点危险。这是其中之一。问题是它在循环中调用DoEvents,相当于保持消息循环可操作。因此,Windows消息(如Paint事件和消息框的输入事件)将被正常分派和处理。这可以防止你的用户界面冻结。
然而,这可能会导致重新入侵问题。消息框通过禁用应用程序中的所有窗口来解决最严重的问题。请注意单击其中一个窗口时发出的哔声。但是不阻止定时器消息。所以5秒后,你的Timer1_Tick()方法再次运行。显示另一个消息框。等待足够长时间解雇它们,你的屏幕就会填满消息框。运行多次的文件操作代码可能会有其他问题。解决方法很简单,只需在方法开头禁用Timer即可。最后重新启用它。在这样的代码中,BackgroundWorker也是一种常见的选择,它可以防止缓慢的文件下载冻结你的UI。