vb.net中的离开延时
我有一个表单,在每行执行之前,我需要给出3秒的时间延迟。但是当我尝试system.threading.thread.sleep时,它会冻结UI,而且所有延迟都作为一个延迟执行。 就是 如果我有vb.net中的离开延时,.net,vb.net,multithreading,delay,.net,Vb.net,Multithreading,Delay,我有一个表单,在每行执行之前,我需要给出3秒的时间延迟。但是当我尝试system.threading.thread.sleep时,它会冻结UI,而且所有延迟都作为一个延迟执行。 就是 如果我有 label.text = "intializing..." sleep(5000) label1.text = "connectinh..." sleep(5000) label2.text = "connected..." sleep(5000) UI完全冻结15秒,然后所有执行都会立即发生,就好像它
label.text = "intializing..."
sleep(5000)
label1.text = "connectinh..."
sleep(5000)
label2.text = "connected..."
sleep(5000)
UI完全冻结15秒,然后所有执行都会立即发生,就好像它们之间没有延迟语句一样。除了threading.sleep,我找不到任何其他内容。您需要在单独的事件中更新每个标签,并让它刷新UI。 创建一个计时器,该计时器将调用事件处理程序,并在其中每次更新不同的标签。请尝试以下操作:
label.text = "intializing..."
Application.DoEvents
sleep(5000)
label1.text = "connectinh..."
Application.DoEvents
sleep(5000)
label2.text = "connected..."
Application.DoEvents
sleep(5000)
Application.DoEvents告诉操作系统处理底层工作,例如更新文本值
label.text = "intializing..."
label.Refresh
sleep(5000)
label1.text = "connectinh..."
label1.Refresh
sleep(5000)
label2.text = "connected..."
label2.Refresh
sleep(5000)
我认为这应该比DoEvents更有效 罗恩说的话:
Private Sub Form1_Shown(sender As Object, _
e As System.EventArgs) Handles Me.Shown
Dim t As New Threading.Thread(AddressOf showLabelText)
t.IsBackground = True
t.Start()
End Sub
Const delaySecs As Integer = 3
Private Sub showLabelText()
Dim del As New foo(AddressOf updLabel)
Label1.BeginInvoke(del, "one")
Threading.Thread.Sleep(delaySecs * 1000)
Label1.BeginInvoke(del, "two")
Threading.Thread.Sleep(delaySecs * 1000)
Label1.BeginInvoke(del, "three")
Threading.Thread.Sleep(delaySecs * 1000)
End Sub
Delegate Sub foo(theText As String)
Private Sub updLabel(theText As Object)
Label1.Text = DirectCast(theText, String)
End Sub
内联解决方案,无多线程,无计时器
Sub delay(ByVal delay_ms As Integer)
Dim tspan As New TimeSpan
Dim tstart = Now
While tspan.TotalMilliseconds < delay_ms
tspan = Now - tstart
Application.DoEvents()
End While
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label1.Text = "Hello"
delay(100) 'leaks 572 ns every 10 ms
Label1.Text = "Salut"
End Sub
说这件事很紧急不会让你得到更快的答案。充其量,人们会忽略它;最坏的情况是,这会激怒他们,他们会停止阅读……这只是一个形容词,我不知道为什么ppl会被它激怒。我清楚地解释了我的问题,并说它很紧急。我不认为这有什么问题。事实上,这是我所做的,在一个稍微修改的方式