반응형

* VBNET Delay 함수 예제...

 

메인화면

Form1.vb

 

 

Public Class Form1
    '지연 시간 젤 변수...
    Dim dtDelayStart As DateTime

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        '지연
        dtDelayStart = DateTime.Now

        '지연 함수 사용
        '5초간 지연
        'Call DelaySystem(5000) <- VB6 처럼 함수 Call 키워드를 써서도 가능
        DelaySystem(5000)

        '지연 시간 구하기
        Dim ts As TimeSpan = DateTime.Now - dtDelayStart
        lblTime.Text = ts.Seconds.ToString()

    End Sub

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        '지연 중 버튼 클릭 할 
        lbl.Text = "지연 시간 중 버튼 Click..."
    End Sub

    Private Sub DelaySystem(ByVal ms As Integer)
        'DelaySystem
        '1000ms = 1초
        '전달인자 : 얼마나 지연 시킬 것인가에 대한 변수
        Dim dtAfter As DateTime = DateTime.Now
        Dim dtDuration As TimeSpan = New TimeSpan(0, 0, 0, 0, ms)
        Dim dtThis As DateTime = dtAfter.Add(dtDuration)

        While (dtThis >= dtAfter)
            'DoEvents() 를 사용 해서 지연 시간 동안
            '버튼 클릭 이벤트 및 다른 윈도우 이벤트를 받을 수 있게끔 하는 역할
            '없으면 지연 동안 다른 이벤트를 받지 못함...
            '
            System.Windows.Forms.Application.DoEvents()
            '현재 시간 얻어 오기...
            'VBNET 은 VB6 처럼 Date.Now 로 해도 됨.
            dtAfter = DateTime.Now

        End While

        'VB6 처럼 아래의 소스 처럼 Date 클래스 사용으로도 표현 가능
        'Dim dtAf As Date = Date.Now
        'Dim dtDrua As TimeSpan = New TimeSpan(0, 0, 0, 0, ms)
        'Dim dtTh As Date = dtAf.Add(dtDuration)

        'While (dtTh >= dtTh)
        'System.Windows.Forms.Application.DoEvents()
        'dtAf = Date.Now
        'End While

    End Sub

End Class

 

위 소스 예제를 보면 DelaySystem 함수 안 While 문 에 Application.DoEvents() 함수가 있습니다.

DoEvents() 함수 가 있고 없고 차이는 예제를 따라 하면서 주석 처리를 하시면 확연한 결과를 보실 수 있습니다.

 

주석에서 설명 드렸듯 윈도우의 다른 이벤트를 받을 수 있고 없고 인데 딜레이 함수 만드는 이유는

타이밍을 늦게 잡기 위해 딜레이 함수 밑에 코드 구현 구문을 조금 지연 시킨 뒤 실행 하고 싶으실 때

그럼 System.Threading.Thread.Sleep() 으로 하면 되지 않나 싶지만 이 또한 딜레이 함수에 DoEvents() 가 없는

결과와 같습니다.

 

하지만 DoEvents() 함수의 남발한 사용 및 사용 위치에 따라 상상하지 못한 결과를 얻으실 수도 있습니다.

 

* 예제 결과

 

진행 중 화면

 

말씀 드렸듯 지연함수는 그대로 돌고 있으며 다른 버튼을 클릭 했을 때의 이미지 입니다. DoEvents() 가 없이 저 버튼을

클릭 하였다면 5초뒤에 이벤트가 실행되는 현상을 보실 수 있습니다.

 

결과 화면

반응형

+ Recent posts