在使用計時器需要知道,自己的需求而選擇適合的計時器,
在 C# 提供了三種的計時器
1.System.Windows.Forms.Timer
2.System.Timers.Timer
3.System.Threading.Timer
這邊將不探討這三種計時器的差別,有興趣可以參考這篇 C# timer的比較
本篇將使用第一種計時器示範。
因使用WPF撰寫,預設沒有加入該計時器的參考,所以須自行加入System.Windows.Forms參考。
加入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 加入按鈕事件能選擇註冊的事件,即選擇相同事件即可。
然後在事件內加入判斷目前點選是哪個按鈕即可,判別方式為按鈕的名稱。
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
留言列表