C# 델리게이트를 이용한 이벤트 생성 (Part-2)

Software/C#|2023. 2. 5. 00:22
반응형

이벤트 생성 part-2 에서는 MyTimer 클래스를 만들게 됩니다. 

타이머에 시간(초단위)을 설정하고 시작을 누르면 해당시간이 지나면 이벤트를 발생시키는 예제 입니다. 타이머 클래스 내부에 Thread 를 이용하여 시간의 흐름을 감지하도록 코딩되어 있습니다.

 

public class MyTimer
{
    public delegate void EventHandler(object sender, EventArgs e);
    public event EventHandler? OnTimeoutHandler = null;
    public int time {set; get;}    // Unit is sec 

    public MyTimer(int time)
    {
        this.time = time;
    }

    public void start()
    {
        Thread myThread = new Thread(run);
        myThread.Start();  // Thread 동작
    }

    private void run()   // 타이머 동작 함수 
    {
        var timeout = time;
        while(true)
        {
            Thread.Sleep(1000);
            if (--timeout <= 0) break; 
        }

        if(OnTimeoutHandler is not null) OnTimeoutHandler(this, new EventArgs());
        // 타이머 동작 완료가 되면 이벤트 함수를 호출합니다.
    }
}

 

사용방법은 아래와 같습니다. 

    public partial class Form1 : Form
    {
        MyTimer myTimer = new MyTimer(10);   // 10초 타이머 객체 생성 
        public Form1()
        {
            InitializeComponent();
            myTimer.OnTimeoutHandler += timeout_event;  // 이벤트 실행 함수 등록 
        }

        private void timeout_event(object sender, EventArgs e)
        {
            MessageBox.Show("Timeout Message..");  // 타이머 종료시 메시지 출력
        }

        private void button1_Click(object sender, EventArgs e)
        {
            myTimer.start();   // 타이머 시작 
        }
    }

 

반응형

댓글()