반응형
* 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초뒤에 이벤트가 실행되는 현상을 보실 수 있습니다.
반응형
'VB.NET Programming' 카테고리의 다른 글
[VBNET] FileCopy (파일 복사 예제) (0) | 2019.10.09 |
---|---|
[VBNET] 프로그램 중복 실행 방지 (0) | 2019.10.07 |
[VBNET] 폴더 및 파일, 드라이브 사이즈 (Size) 구하기 (0) | 2019.10.03 |
[VBNET] 레지스트리를 이용한 윈도우 시작 시 자동 실행 (0) | 2019.10.01 |
[VBNET] Excel File Read & Write 예제 (0) | 2019.09.29 |