본문 바로가기

.NET(C#,ASP)

[C#]Form에서 타이머(Timer)사용하기

콘솔 프로그램이라면 쓰레드(Thread)를 사용해야 하겠지만 윈폼에서는 타이머를 제공해주므로 쉽게 쓰레딩의 효과를 사용할 수 있다.
사실 몇 년만에 다시 프로그래밍을 해보려니 아주 까먹어도 너무 깨끗하게 까먹어서 놀라울 지경이다..

그래서 새로 시작하는 마음으로 요새 C#을 다시 공부하고 있다.

아무튼, 스케쥴 걸어서 돌릴 작업이 있는데 이를 처음에 쓰레드로 구현하려다가 생각도 잘 안나고 여기저기 뒤져봐도 개념이 어렵고 그래서 고민하다가 타이머를 알게 되었다.
물론 알던건데.. 다시 발견한거라고 해야 하려나.. ㅋㅋ

타이머의 사용은 간단하다.
폼에 타이머 컨트롤을 드래그해서 붙여넣고, 타이머 컨트롤을 더블클릭하여 생기는 메쏘드(Method)에 스케쥴 작업을 집어넣으면 된다.

다시 설명하자면 타이머는 기본적으로 4가지만 알 면 된다.
타이머는 스케쥴 작업이라고 생각하면 간단한데, 우리가 스케쥴 작업을 만들 때 고려해야 할 것들이 바로 타이머의 필수 입력값 내지는 메쏘드라고 보면 되겠다.

예를 들어 작업관리자처럼 실시간 프로세스 모니터링 프로그램을 만든다고 하자.
그럼 스케쥴 작업 내용은 실시간 프로세스 목록을 가져오는 것이다.
몇 초마다 목록을 가져올까? 5초마다? 그렇다면 스케쥴 간격은 5초가 되는 것이다.
이게 전부다.

윈폼의 타이머는 System.Windows.Forms.Timer이다.
(자세한 도움말은 http://msdn.microsoft.com/ko-kr/library/system.windows.forms.timer.aspx 여기를 참조하자)

아래와 같이 타이머의 속성을 설정해주고 시작시켜준다.
Form1_Load에서 timer1_Tick(sender, e);과 같이 수동으로 타이머 이벤트를 직접 호출한 이유는 폼이 시작되면서 바로 스케쥴 작업을 한 번 실행시키기를 원해서이다. 이게 없으면 스케쥴 간격만큼 먼저 기다렸다가 작업이 시작되게 된다.

정해진 시간 간격이 되면 타이머는 이벤트를 발생시키게 되는데 그게
private void timer1_Tick(object sender, EventArgs e)
이벤트이다.

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1_Tick(sender, e);
            timer1.Interval = 5000; //스케쥴 간격을 5초로 준 것이다.
            timer1.Start(); //타이머를 발동시킨다.
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            textBox1.Text = "";
            foreach (System.Diagnostics.Process procName in System.Diagnostics.Process.GetProcesses())
            {
                string procNm = procName.ToString();
                procNm = procNm.Replace("System.Diagnostics.Process (", "");
                procNm = procNm.Replace(")", "");
                textBox1.AppendText(procNm + Environment.NewLine);
            }
        }

여기서 어떤 버튼을 클릭했을 때 타이머를 멈춰야 한다면, 버튼 클릭 이벤트에 timer1.Stop(); 이거 한 줄 넣어주면 끝이다.