본문 바로가기

프로그래밍/C#

[C#] Timer 타이머 (특정 시간마다 이벤트 반복 수행)

반응형

 

 

 

 

 

 

 

 

 

타이머를 이용해 특정 시간(매분/초)마다 반복 작업을 수행할 수 있다.

 

일종의 매크로/스케줄러 같은 역할을 수행하는 것이다.

 

 

 

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

 

 

 

 

 

 

 

 

반응형