2

我的问题是我需要在按下按钮后等待 3-4 秒才能检查它,这是我在 button1_click 下的代码:

        While Not File.Exists(LastCap)
            Application.DoEvents()
            MsgBox("testtestetstets")
        End While

        PictureBox1.Load(LastCap)

我认为我做错了一些非常简单的事情,我在 VB 方面不是最好的,因为我只是在学习,所以任何解释都会很棒!

~谢谢

4

5 回答 5

6

如果您需要等待的原因是要创建文件,请尝试使用 aFileSystemWatcher并以响应事件的方式响应CreatedChanged事件,而不是任意等待选定的时间段。

就像是:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    FileSystemWatcher1.Path = 'Your Path Here
    FileSystemWatcher1.EnableRaisingEvents = True
   'Do what you need to todo to initiate the file creation
End Sub

Private Sub FileSystemWatcher1_Created(sender As Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Created, FileSystemWatcher1.Changed
    If e.Name = LastCap Then
        If (System.IO.File.Exists(e.FullPath)) Then
            FileSystemWatcher1.EnableRaisingEvents = False
            PictureBox1.Load(e.FullPath)
        End If
    End If
End Sub
于 2012-11-22T22:57:29.093 回答
5

您可以使用,但不推荐:

Threading.Thread.Sleep(3000) 'ms

这将等待 3 秒,但也会阻塞同一线程上的所有其他内容。如果你以这种形式运行它,你的用户界面在等待结束之前不会响应。

顺便说一句:使用MessageBox.Show("My message")代替MsgBox(后者来自旧VB)。

于 2012-11-22T20:15:31.503 回答
5

如果您希望表单在 3 秒过去后继续运行,您可以添加一个 Timer 控件,代码如下:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' set the timer
    Timer1.Interval = 3000 'ms
    Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Timer1.Stop()
    'add delayed code here
    '...
    '...
    MessageBox.Show("Delayed message...")
End Sub

将 Timer 控件从工具箱拖放到表单中。它在运行时不可见

于 2012-11-22T22:16:12.180 回答
4

或者更好的是使用秒表制作等待功能,这不会像线程睡眠一样停止同一线程中的进程

 ' Loops for a specificied period of time (milliseconds)
Private Sub wait(ByVal interval As Integer)
    Dim sw As New Stopwatch
    sw.Start()
    Do While sw.ElapsedMilliseconds < interval
        ' Allows UI to remain responsive
        Application.DoEvents()
    Loop
    sw.Stop()
End Sub

用法

wait(3000)

延迟 3 秒

于 2015-05-24T17:23:14.523 回答
3

你可以用这个

Public Sub BeLazy()
    For i = 1 To 30
        Threading.Thread.Sleep(100)
        Application.DoEvents()
    Next
End Sub

它将延迟 3 秒。

于 2015-05-24T16:33:37.027 回答