반응형
* 지연(Delay) 함수 예제
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CSharp_Delay
{
public partial class Form1 : Form
{
//지연 시간 잴 변수...
DateTime dtDelayStart;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
dtDelayStart = DateTime.Now;
//지연 함수 사용...
//5초간 지연
DelaySystem(5000);
//System.Threading.Thread.Sleep(5000);
//지연 시간 구하기...
TimeSpan ts = DateTime.Now - dtDelayStart;
lblTime.Text = ts.Seconds.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
lbl.Text = "지연 시간 중 버튼 Click...";
}
//지연 함수...
private void DelaySystem(int MS)
{
/* 함수명 : DelaySystem
* 1000ms = 1초
* 전달인자 : 얼마나 지연시킬것인가에 대한 변수
* */
DateTime dtAfter = DateTime.Now;
TimeSpan dtDuration = new TimeSpan(0, 0, 0, 0, MS);
DateTime dtThis = dtAfter.Add(dtDuration);
while (dtThis >= dtAfter)
{
//DoEvent () 를 사용 해서 지연 시간 동안
//버튼 클릭 이벤트 및 다른 윈도우 이벤트를 받을 수 있게끔 하는 역할
//없으면 지연 동안 다른 이벤트를 받지 못함...
System.Windows.Forms.Application.DoEvents();
//현재 시간 얻어 오기...
dtAfter = DateTime.Now;
}
}
}
}
위 소스 예제를 보면 DelaySystem 함수 안 While 문 에 Application.DoEvents() 함수가 있습니다.
DoEvents() 함수 가 있고 없고 차이는 예제를 따라 하면서 주석 처리를 하시면 확연한 결과를 보실 수 있습니다.
주석에서 설명 드렸듯 윈도우의 다른 이벤트를 받을 수 있고 없고 인데 딜레이 함수 만드는 이유는
타이밍을 늦게 잡기 위해 딜레이 함수 밑에 코드 구현 구문을 조금 지연 시킨 뒤 실행 하고 싶으실 때
그럼 System.Threading.Thread.Sleep() 으로 하면 되지 않나 싶지만 이 또한 딜레이 함수에 DoEvents() 가 없는
결과와 같습니다.
하지만 DoEvents() 함수의 남발한 사용 및 사용 위치에 따라 상상하지 못한 결과를 얻으실 수도 있습니다.
* 예제 결과
말씀 드렸듯 지연함수는 그대로 돌고 있으며 다른 버튼을 클릭 했을 때의 이미지 입니다. DoEvents() 가 없이 저 버튼을
클릭 하였다면 5초뒤에 이벤트가 실행되는 현상을 보실 수 있습니다.
반응형
'C# Programming' 카테고리의 다른 글
[C#] File Copy (파일 복사 예제) (0) | 2019.10.08 |
---|---|
[C#] 프로그램 중복 실행 방지 (0) | 2019.10.06 |
[C#] 폴더 및 파일, 드라이브 사이즈 (Size) 구하기 (0) | 2019.10.02 |
[C#] 레지스트리를 이용 윈도우 시작 시 프로그램 자동 실행 (3) | 2019.09.30 |
[C#] Excel File Write & Read 예제... (0) | 2019.09.28 |