TimerCallback
안녕하세요
강주님입니다.
TimerCallback 에 대해 알아 보는 시간을 갖고자 메일 보냅니다.
어떤 프로젝트를 하다 보면 특정 시간이 지나면 이벤트를 발생시키는 일이 종종 생깁니다. 이때 흔히 타이머를 실행 시켜 특정 시간 동안 반복 비교 연산하여 같다면 이벤트를 발생시키는데 TimerCallbak를 이용하면 간단히 해결이 됩니다.. 말 그대로 TimerCallback를 하기 위해 만들어 놓은거죠.
this._timer = new Timer(new TimerCallback(delegate(object _callback)
{
((CallBackDelegate)_callback)();
}), Callback, Time, new TimeSpan(24, 0, 0));
Callback은 callback method
Time은 만료 예정 시간 TimeSpan 입니다.
간단히 소스코드를 만들어 봤습니다. 첨부파일 참조
,
[MSDN 참조]
using System;
using System.Threading;
class TimerExample
{
static void Main()
{
AutoResetEvent autoEvent = new AutoResetEvent(false);
StatusChecker statusChecker = new StatusChecker(10);
// Create the delegate that invokes methods for the timer.
TimerCallback timerDelegate =
new TimerCallback(statusChecker.CheckStatus);
// Create a timer that signals the delegate to invoke
// CheckStatus after one second, and every 1/4 second
// thereafter.
Console.WriteLine("{0} Creating timer.\n",
DateTime.Now.ToString("h:mm:ss.fff"));
Timer stateTimer =
new Timer(timerDelegate, autoEvent, 1000, 250);
// When autoEvent signals, change the period to every
// 1/2 second.
autoEvent.WaitOne(5000, false);
stateTimer.Change(0, 500);
Console.WriteLine("\nChanging period.\n");
// When autoEvent signals the second time, dispose of
// the timer.
autoEvent.WaitOne(5000, false);
stateTimer.Dispose();
Console.WriteLine("\nDestroying timer.");
}
}
class StatusChecker
{
int invokeCount, maxCount;
public StatusChecker(int count)
{
invokeCount = 0;
maxCount = count;
}
// This method is called by the timer delegate.
public void CheckStatus(Object stateInfo)
{
AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
Console.WriteLine("{0} Checking status {1,2}.",
DateTime.Now.ToString("h:mm:ss.fff"),
(++invokeCount).ToString());
if(invokeCount == maxCount)
{
// Reset the counter and signal Main.
invokeCount = 0;
autoEvent.Set();
}
}
}