Vb.net 在sub_延迟后返回以执行更多代码(2000)

Vb.net 在sub_延迟后返回以执行更多代码(2000),vb.net,delay,Vb.net,Delay,我有一个vb.net表单+按钮+文本框+延迟子项: 'DELAY SUB Public Sub Delay(ByVal Milliseconds As Integer) Dim Stop_Watch_2 As New Stopwatch Stop_Watch_2.Start() Do Loop Until Stop_Watch_2.ElapsedMilliseconds >= Milliseconds End Sub Private Sub

我有一个vb.net表单+按钮+文本框+延迟子项:

'DELAY SUB
 Public Sub Delay(ByVal Milliseconds As Integer)
     Dim Stop_Watch_2 As New Stopwatch
     Stop_Watch_2.Start()
     Do
     Loop Until Stop_Watch_2.ElapsedMilliseconds >= Milliseconds
 End Sub

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     For i = 1 To 10
         Delay(2000) ' 2 second delay
         Text_Box1.text = i.ToString
         Button1.Left = Button1.Left + 30
     Next
 End Sub
当我运行表单时,我可以看到按钮每两秒钟向左移动一次。按钮在延迟状态下移动是正常的,但文本不采用循环值。这种延迟方法对我来说比thread.Sleep更好


对于如何让文本框在延迟间隔后更新其内容,有何建议

这在您的UI线程上同步运行,阻止它更新UI,直到一切完成。您需要调用或将控制返回给消息泵,以便可以自然地重新绘制UI


旁注:你在忙着等待,也许不应该。即使你喜欢这种延迟更好的方法(由于时间的原因或其他原因),考虑添加一个对代码>线程的调用。睡眠在你的循环中有一个小的值,给你的用户的CPU一个中断,或者至少让它回到编码CAT视频。< /P>线程。Maybe@MalcorOP没有透露细节,但他确实说“这种延迟方法对我来说比线程更好。Sleep@TylerH是的,我在发布后发现,这是漫长的一天。
TextBox
正在“接受”它,它可能不会每次更新都重新绘制。添加
Text\u Box1.Refresh()
非常感谢,坦率地说,我通过添加“do more code”解决了这个问题,它在计时器完成点之后,我将它添加到计时器本身中