2011-04-09 5 views
-1

각 행을 실행하기 전에 3 초의 시간 지연을 제공해야하는 양식이 있습니다. 하지만 system.threading.thread.sleep을 시도하면 UI가 멈추고 모든 지연은 하나의 지연으로 실행됩니다. 나는 UI가 완전히 다음 15 초 동안 정지 그들 사이의 지연 문이 없었다 것처럼 모든 executiong가 즉시 발생vb.net에서 시간 지연을 남김

label.text = "intializing..." 
sleep(5000) 
label1.text = "connectinh..." 
sleep(5000) 
label2.text = "connected..." 
sleep(5000) 

이있는 경우

입니다 . threading.sleep 이외의 다른 것을 찾을 수 없었습니다.

+2

"이것은 긴급합니다"라고 대답하면 더 빨리 답변을 얻을 수 없습니다. 기껏해야 사람들은 무시할 것입니다. 최악의 경우, 그것은 그들을 자극하고 독서를 멈출 것입니다 ... –

+0

그것의 형용사, 나는 왜 ppl이 그것에 짜증나야만하는지 모른다. 나는 나의 문제를 분명하게 설명하고 긴급하다고 말했다. 나는 theres가 그것으로 아무것도 틀리게 생각하지 않는다. – swordfish

답변

2

:

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 
+0

사실 이것은 약간 수정 된 방식으로 내가 한 일입니다. – swordfish

0

별도의 이벤트에서 각 레이블을 업데이트하고 UI를 새로 고쳐야합니다.

0

다음 시도 다른 레이블마다 업데이트 이벤트 핸들러를 호출하고 그것에하는 타이머를 만듭니다

label.text = "intializing..." 
Application.DoEvents 
sleep(5000) 
label1.text = "connectinh..." 
Application.DoEvents 
sleep(5000) 
label2.text = "connected..." 
Application.DoEvents 
sleep(5000) 

Application.DoEvents를 같은 텍스트 값을 업데이트하는 등, 작업의 기초가되는 OS 프로세스를 알려줍니다 .

0
label.text = "intializing..." 
label.Refresh 
sleep(5000) 
label1.text = "connectinh..." 
label1.Refresh 
sleep(5000) 
label2.text = "connected..." 
label2.Refresh 
sleep(5000) 

DoEvents보다 더 올바르게 작동해야한다고 생각합니다! 론 말했다 무엇

1

인라인 솔루션, 아니 멀티 스레딩, 아니 타이머.

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 
관련 문제