반응형
타이머를 이용해 특정 시간(매분/초)마다 반복 작업을 수행할 수 있다.
일종의 매크로/스케줄러 같은 역할을 수행하는 것이다.
1초 (1000 밀리초) 마다 이벤트 실행
class Example
{
private static Timer aTimer;
private static readonly double cycleTime = 1000; // 1초
static void Main(string[] args)
{
SetTimer();
aTimer.Stop();
aTimer.Dispose();
}
private static void SetTimer()
{
aTimer = new System.Timers.Timer(cycleTime);
// 이벤트 핸들러 연결
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Timer에서 Elapsed 이벤트를 반복해서 발생
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
//수행할 타이머 이벤트
Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}", e.SignalTime);
}
}
하루 1회 지정된 시간에 이벤트 실행 (1초마다 시간 체크)
class Example
{
private static Timer aTimer;
private static readonly double cycleTime = 1000; // 1초
private static DateTime yesterdayDate = DateTime.ParseExact(DateTime.Now.AddDays(-1).ToString("yyyyMMdd"), "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
private static readonly string sendTime = "080000"; //HHmmss
static void Main(string[] args)
{
SetTimer();
aTimer.Stop();
aTimer.Dispose();
}
private static void SetTimer()
{
aTimer = new System.Timers.Timer(cycleTime);
// 이벤트 핸들러 연결
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Timer에서 Elapsed 이벤트를 반복해서 발생
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
DateTime todayDate = DateTime.ParseExact(DateTime.Now.ToString("yyyyMMdd"), "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
DateTime nowTime = DateTime.ParseExact(DateTime.Now.ToString("HHmmss"), "HHmmss", System.Globalization.CultureInfo.InvariantCulture);
DateTime setTime = DateTime.ParseExact(sendTime, "HHmmss", System.Globalization.CultureInfo.InvariantCulture);
if (todayDate > yesterdayDate)
{
if (nowTime >= setTime)
{
//수행할 타이머 이벤트
Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}", e.SignalTime);
}
yesterdayDate = todayDate;
}
}
}
참고 사이트
https://docs.microsoft.com/ko-kr/dotnet/api/system.timers.timer?view=net-5.0
https://docs.microsoft.com/ko-kr/dotnet/api/system.timers.timer.autoreset?view=net-5.0
반응형
'프로그래밍 > C# ' 카테고리의 다른 글
[C#] XML 파일 쓰기 (줄 바꿈 등 출력 형식 지정) (0) | 2019.10.14 |
---|---|
[C#] 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. (2) | 2019.10.01 |
[JavaScript/C#] GET 방식으로 배열 값 전송 (JSON.stringfy, JsonConvert.DeserializeObject) (0) | 2019.05.23 |
[C#] MVC View (Razor) (0) | 2018.10.22 |
[C#] MVC Model (0) | 2018.10.22 |