VB - 一次显示msgbox(r)

时间:2012-06-02 04:53:34

标签: vb.net visual-studio-2010 visual-studio timer

我有以下代码:

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。我不明白这一点。

抱歉我的英语不好,我来自罗马尼亚。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果在错误的地方使用正确的原因,消息框可能有点危险。这是其中之一。问题是它在循环中调用DoEvents,相当于保持消息循环可操作。因此,Windows消息(如Paint事件和消息框的输入事件)将被正常分派和处理。这可以防止你的用户界面冻结。

然而,这可能会导致重新入侵问题。消息框通过禁用应用程序中的所有窗口来解决最严重的问题。请注意单击其中一个窗口时发出的哔声。但是阻止定时器消息。所以5秒后,你的Timer1_Tick()方法再次运行。显示另一个消息框。等待足够长时间解雇它们,你的屏幕就会填满消息框。运行多次的文件操作代码可能会有其他问题。

解决方法很简单,只需在方法开头禁用Timer即可。最后重新启用它。在这样的代码中,BackgroundWorker也是一种常见的选择,它可以防止缓慢的文件下载冻结你的UI。