在使用計時器需要知道,自己的需求而選擇適合的計時器,

在 C# 提供了三種的計時器

1.System.Windows.Forms.Timer

2.System.Timers.Timer

3.System.Threading.Timer

這邊將不探討這三種計時器的差別,有興趣可以參考這篇 C# timer的比較

本篇將使用第一種計時器示範。


因使用WPF撰寫,預設沒有加入該計時器的參考,所以須自行加入System.Windows.Forms參考。

1  


加入System.Windows.Forms命名空間。

using System.Windows.Forms;


首先在MainWindow.xaml加入一個倒數的按紐,並加入Click事件

 <Button x:Name="TimerBt" Content="開始倒數" Click="TimerBt_Click"/>

 

然後切換至MainWindow.xaml.cs 撰寫按鈕Click要處理的事情

private void TimerBt_Click(object sender, RoutedEventArgs e)
{
   //倒數的秒數
   sec = 10;
   timer = new Timer();
   //設定計時器的速度
   timer.Interval = 1000;
   timer.Tick += new EventHandler(timer_Tick);
   timer.Start();
}


一般在撰寫按鈕事件往往都是,一個按鈕就要註冊一個新事件,

不過在WPF可以一個事件同時有好幾個按鈕使用,使用方式很簡單,

在MainWindow.xaml 加入按鈕事件能選擇註冊的事件,即選擇相同事件即可。

2  


然後在事件內加入判斷目前點選是哪個按鈕即可,判別方式為按鈕的名稱。

        private void TimerBt_Click(object sender, RoutedEventArgs e)
        {
            //sender判斷進入的按鈕
            if (sender == TimerBt)
            {
                //倒數的秒數
                sec = 10;
                timer = new Timer();
                //設定計時器的速度
                timer.Interval = 1000;
                timer.Tick += new EventHandler(timer_Tick);
                timer.Start();
            }
            else if (sender == TimerBt1)
            {
                timer1 = new Timer();
                timer1.Interval = 1000;
                timer1.Tick += new EventHandler(timer1_Tick);
                timer1.Start();
            }
        }


完整的MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Forms;

namespace demoTimer
{
    /// 
    /// MainWindow.xaml 的互動邏輯
    /// 
    public partial class MainWindow : Window
    {
        Timer timer;
        Timer timer1;
        int sec, h, m, s;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

        }


        //倒數計時
        void timer_Tick(object sender, EventArgs e)
        {
            if (sec > 0)
            {
                TimerText.Text = sec + "  seconds";
                sec--;
            }
            else
            {
                timer.Stop();
                TimerText.Text = "Time's up!";
            }
        }

        //開始計時
        void timer1_Tick(object sender, EventArgs e)
        {
            TimerText1.Text=h + " :" + m + " :" + s ;

            s++;

            if (s > 60)
            {
                s = 0;
                m++;

                if (m > 60)
                {
                    m = 0;
                    h++;

                    if (h > 23)
                    {
                        h = 0;
                    }
                }

            }

        }

        private void TimerBt_Click(object sender, RoutedEventArgs e)
        {
            //sender判斷進入的按鈕
            if (sender == TimerBt)
            {
                //倒數的秒數
                sec = 10;
                timer = new Timer();
                //設定計時器的速度
                timer.Interval = 1000;
                timer.Tick += new EventHandler(timer_Tick);
                timer.Start();
            }
            else if (sender == TimerBt1)
            {
                timer1 = new Timer();
                timer1.Interval = 1000;
                timer1.Tick += new EventHandler(timer1_Tick);
                timer1.Start();
            }
        }
    }
}


MainWindow.xaml

 

<Grid>
<StackPanel>
<Button x:Name="TimerBt" Content="開始倒數" Click="TimerBt_Click"/>
<TextBlock x:Name="TimerText"/>
<Button x:Name="TimerBt1" Content="開始計時" Click="TimerBt_Click"/>
<TextBlock x:Name="TimerText1" />
</StackPanel>
</Grid>


範例下載:demoTimer

 

arrow
arrow
    文章標籤
    Timer C# 計時器
    全站熱搜

    東勢厝滴yang 發表在 痞客邦 留言(0) 人氣()