본문 바로가기
Develop/C#

c# 타이머, timer - stopwatch 만들기

by 투게더리 2021. 2. 15.
반응형

1. c#의 timer class 란?

주기적으로 함수를 호출하기 위한 class라고 생각하면 될것 같다.

2. 어디에 사용할 수 있을까?

나는 Stop Watch App을 만들면서

50ms, 즉 0.05초마다 화면을 갱신해서

스탑워치 시간이 올라가는 것을 보여주기 위해 사용했다

 

 

 

 

3. 코드 설명

아래 처럼 몇 ms 주기로 호출할지 설정하고 

각 주기마다 불릴 함수(updateHandler) 아무거나를 지정한다.

 

Timer timer = new Timer();  // System.Windows.Forms.Timer 임 c#에는 다른 Timer class도 있음, 맨 밑에 내용 참조

timer .Interval = 50;

timer .Tick += new EventHandler(updateHandler);

 

그럼 설정된 함 수 의 내용이 주기적으로 불리게 된다.

private void updateHandler(object sender, EventArgs e) {

      //ui update 또는 다른 작업

}

 

4. 전체 코드

        private Timer mTimer;

        private void init()
        {
        // System.Windows.Forms.Timer class 선언
        // 50 millisecond 간격으로 호출
        // mTimer.Tick 은 50 간격으로 호출될 함수 선언
        
            mTimer = new Timer();
            mTimer.Interval = 50;
            mTimer.Tick += new EventHandler(updateHandler);

            btn_start.Text = CommonConstants.BUTTON_NAME_START;
        }

        // 버튼을 눌러서 timer를 시작/종료 하는 부분
        private void btn_start_Click(object sender, EventArgs e)
        {
            if(btn_start.Text == CommonConstants.BUTTON_NAME_START)
            {
                btn_start.Text = CommonConstants.BUTTON_NAME_STOP;
                mTimer.Start();
            }
            else
            {
                btn_start.Text = CommonConstants.BUTTON_NAME_START;
                mTimer.Stop();
            }

        }
        
        // timer로 인해 호출될때마다 숫자를 1씩 올리도록 함
        // 여기서 ui 업데이를 하면 됨
        private void updateHandler(object sender, EventArgs e)
        {
            lbl_watch_display.Text = i++;
        }

 

 

 

 

참고 사항

c#에는 다양한 Timer class가 있는데 각각의 특징이 있다.

나는 1번 class를 사용했고 ui를 업데이트 할때 별도 처리를 안해줘도 된다.

 

나머지는 ui업데이트시 Begininvoke 등을 써서 처리를 해야한다. 

2,3 번을 써야하는 경우의 app이 생기면 그때 더 자세히 알아보도록 하겠다.

 

1 - System.Windows.Forms.Timer class

2 - System.Threading.Timer

3 - System.Timers.Timer

 

 

다른 Post 보기

 

반응형

댓글