본문 바로가기
IT-개발,DB

[개발] Timer 클래스 (System.Windows.Forms.Timer)

by SB리치퍼슨 2010. 11. 5.

Timer 클래스
- System.Windows.Forms.Timer

 

사용자가 정의한 간격마다 이벤트를 발생시키는 타이머를 구현합니다. 이 타이머는 Windows Forms 응용 프로그램에서 사용할 수 있도록 최적화되었으며 창에서 사용해야 합니다.

 

Timer는 사용자가 정의한 간격으로 이벤트를 발생시키는 데 사용됩니다. 이 Windows 타이머는 UI 스레드를 사용하여 프로세스를 수행하는 단일 스레드 환경용입니다. 이 타이머를 사용하려면 사용자 코드에 사용 가능한 UI 메시지 펌프가 있어야 하고 항상 같은 스레드에서 수행되거나 다른 스레드로 호출을 마샬링해야 합니다.

 

이 타이머를 사용할 때에는 Tick 이벤트를 사용하여 폴링 작업을 수행하거나 지정된 시간 동안 시작 화면을 표시합니다. Enabled 속성이 true로 설정되고 Interval 속성이 0보다 크면 항상 Interval 속성 설정을 기반으로 하는 간격에 따라 Tick 이벤트가 발생합니다.

 

이 클래스는 간격을 설정하고 타이머를 시작 및 중지할 수 있는 메서드를 제공합니다.

 

생성자
- public Timer();

 

속성
- Enabled : 타이머가 실행 중인지 여부를 나타내는 값을 가져오거나 설정합니다.
- Interval  : 타이머 틱 사이의 시간(밀리초)을 가져오거나 설정합니다.

 

메소드
- Start : 타이머를 시작합니다.
- Stop  : 타이머를 중지합니다

 

이벤트
- Tick : 지정된 타이머 간격이 경과되고 타이머를 사용할 수 있을 때 발생합니다.


사용예제
: 버튼 클릭시 타이머를 중지하거나 실행시킵니다.

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

 

namespace TimerTest
{
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Button btnTime;
        private System.Windows.Forms.Timer timerNow;
        private System.Windows.Forms.Label lblTime;
        private System.ComponentModel.IContainer components;

 

        public Form1()
        {
            InitializeComponent();
        }

 

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

 

        #region Windows Form 디자이너에서 생성한 코드
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.btnTime = new System.Windows.Forms.Button();
            this.timerNow = new System.Windows.Forms.Timer(this.components);
            this.lblTime = new System.Windows.Forms.Label();
            this.SuspendLayout();
            //
            // btnTime
            //
            this.btnTime.Location = new System.Drawing.Point(16, 48);
            this.btnTime.Name = "btnTime";
            this.btnTime.Size = new System.Drawing.Size(176, 23);
            this.btnTime.TabIndex = 1;
            this.btnTime.Text = "타이머 중지";
            this.btnTime.Click += new System.EventHandler(this.btnTime_Click);
            //
            // timerNow
            //

            this.timerNow.Interval = 1000;
            this.timerNow.Tick += new System.EventHandler(this.timerNow_Tick);
            //
            // lblTime
            //

            this.lblTime.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
            this.lblTime.Font = new System.Drawing.Font("굴림", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(129)));
            this.lblTime.Location = new System.Drawing.Point(16, 16);
            this.lblTime.Name = "lblTime";
            this.lblTime.Size = new System.Drawing.Size(176, 23);
            this.lblTime.TabIndex = 2;
            this.lblTime.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // Form1
            //

            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
            this.ClientSize = new System.Drawing.Size(208, 85);
            this.Controls.Add(this.lblTime);
            this.Controls.Add(this.btnTime);
            this.Name = "Form1";
            this.Text = "Timer테스트";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);

        }
        #endregion

 

        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

 

        //카운트 다운 숫자 표시 변수 선언
        private int countdown = 0;

 

        //Timer.Enabled이 true가 되면 Timer.Interval에서 지정해준 밀리초마다 아래 메소드 실행.

        private void timerNow_Tick(object sender, System.EventArgs e)
        {
            //지정해준 밀리초마다 라벨에 카운트 다운숫자값을 넣어줍니다.
            this.lblTime.Text = "카운트다운 : " + (countdown++);
        }

 

        //Timer가 시작된 상태에서 버튼을 클릭하면 타이머를 중지하고
        //Timer가 중지된 상태에서 버튼을 클릭하면 타이머를 계속 실행하는 메소드

        private void btnTime_Click(object sender, System.EventArgs e)
        {
            if(this.timerNow.Enabled)
            {
                //this.timerNow.Enabled = false;
                this.timerNow.Stop();
                this.btnTime.Text = "타이머 시작";
            }
            else
            {
                //this.timerNow.Enabled = true;
                this.timerNow.Start();
                this.btnTime.Text = "타이머 중지";
            }
        }

 

        //폼이 로드될때 타이머를 실행시킵니다.
        private void Form1_Load(object sender, System.EventArgs e)
        {
            //this.timerNow.Enabled = true;
            this.timerNow.Start();

        }
    }
}

반응형

댓글