web analytics

UWP Code : ทำตัวจับเวลาด้วย DispatcherTimer

cover-1

บทความนี้ สั้นหน่อยนะ ผมมีโอกาสได้ใช้ตัวจับเวลาในการทำ UWP เลยมาบันทึกไว้หน่อย ซึ่งก็ค่อนข้างง่าย ในแง่เทคนิคแล้ว ไม่ต้องใช้ Timer ก็ได้ เราสามารถสร้าง thread แล้วนำใช้เป็นตัวทำงานก็ได้เหมือนกัน เพียงแต่ว่า ใช้ timer จะง่ายกว่านั่นเอง

 

รู้จัก DispatcherTimer

DispatcherTimer ก็คือ คลาสสำหรับนับเวลาโดยมันจะจัดการเรื่อง thread ให้เรา

ที่สำคัญคือ ต้องกำหนด Event Tick ว่าให้ทำอะไร ที่รอบนับมาถึง
Interval จำนวนเวลา แต่ละรอบที่ให้เรียก Tick

Start() , Stop() ก็สั่งเริ่มและหยุดนั่นเอง

 

เริ่มต้น

เริ่มจากประกาศตัวแปรต่างๆ

        DispatcherTimer dispatcherTimer;
        int timesTicked = 1;
        int timesToTick = 160;

 

สร้าง method สำหรับ event Tick ซึ่งจะถูกเรียกทุกๆ รอบตามเวลาที่เรากำหนด

        void dispatcherTimer_Tick(object sender, object e)
        {
            // do somethig when tick by timer.
        }

 

ทำการ init instance แล้วก็ add event ให้กับ Tick
ส่วน Interval ก็คือ รอบเวลาที่ต้องการให้เรียก Tick
สามารถกำหนดได้ 3 พารามิเตอร์ คือ ชม นาที และวินาที

        public void DispatcherTimerSetup()
        {
            dispatcherTimer = new DispatcherTimer();
            dispatcherTimer.Tick += dispatcherTimer_Tick;
            dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
            dispatcherTimer.Start();
        }

 

ต่อมาก็มาเขียนส่วนที่นับเวลา โดยผมจะเอามาทำเป็น progressbar แบบถอยหลัง
ที่สำคัญ จริงๆก็คือ ทำการเพิ่มตัวนับ แล้วเช็คว่าจบหรือยัง ถ้าจบแล้วก็สั่งหยุด dispatcherTimer  โดยเรียก Stop()

        void dispatcherTimer_Tick(object sender, object e)
        {
            int percent = (int)(((timesToTick - timesTicked)*(1.0) / timesToTick) * 100);
            progress_bar.Value = percent;

            timesTicked++;

            if (timesTicked > timesToTick)
            {
                dispatcherTimer.Stop();
            }
        }

 

สรุปแล้วแค่เรียก DispatcherTimerSetup()

        public MainPage()
        {
            this.InitializeComponent();
            DispatcherTimerSetup();
        }

 

จะได้ประมาณนี้

a1

 

จบแล้ว

การทำตัวนับเวลา จับเวลา ก็ง่ายๆเพียงเท่านี้แหละ สามารถนำไปประยุกต์ใช้ต่อไป

 

Reference

https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer(v=vs.110).aspx