在使用計時器需要知道,自己的需求而選擇適合的計時器,
在 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
留言列表