타이머 종류 (4가지)
멀티쓰레딩 지원하는 타이머들 : System.Threading.Timer 클래스, System.Timers.Timer 클래스
싱글쓰레드만 지원하는 타이머 : System.Windows.Forms.Timer 클래스, System.Windows.Threading.DispatcherTimer 클래스
싱글쓰레드용 타이머는 Invoke 실행없이 바로 UI를 Access할 수 있고, 멀티쓰레드용 타이머는 Invoke대리자를 통해 실행.
멀티쓰레드에서 타이머는 항상 같은 작업쓰레드가 이벤트 핸들러를 실행한다는 보장이 없다.
다른 쓰레드가 핸들러를 실행하게 되기 때문에, Thread Safe하게 작성해야 한다.
namespace Study_Timer_1
{
public partial class Form1 : Form
{
System.Timers.Timer timersTimer; // Timers.Timer
public Form1()
{
InitializeComponent();
timersTimer = new System.Timers.Timer();
timersTimer.Interval = 5000;
timersTimer.Elapsed += TimersTimer_Event;
}
private void TimersTimer_Event(object sender, ElapsedEventArgs e)
{
this.Invoke(new MethodInvoker(delegate ()
{
lboxDetail.Items.Add(DateTime.Now.ToString() + " Timers.Timer 작동중 ");
lboxDetail.SelectedIndex = lboxDetail.Items.Count - 1;
}));
}
private void button1_Click(object sender, EventArgs e)
{
timersTimer.Start();
Console.WriteLine("Timers.Timer 시작");
}
private void button2_Click(object sender, EventArgs e)
{
timersTimer.Stop();
Console.WriteLine("Timers.Timer 중지");
}
}
}
'c#' 카테고리의 다른 글
c# 크로스 스레드 작업이 잘못되었습니다. 오류 처리 (0) | 2020.10.27 |
---|---|
c# Enum 사용하기 (0) | 2020.10.27 |
C# 람다식 (Lambda Expression) (0) | 2020.08.15 |
c# 익명타입 (0) | 2020.08.15 |
c# Thread Safety (Lock 사용하기) (0) | 2020.08.15 |