타이머 종류 (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

+ Recent posts