C# WPF定时器倒计时
我想知道WPF中的计时器 我基本上知道的是如何制作一个简单的倒计时计时器(标签),如下代码:C# WPF定时器倒计时,c#,wpf,timer,countdown,C#,Wpf,Timer,Countdown,我想知道WPF中的计时器 我基本上知道的是如何制作一个简单的倒计时计时器(标签),如下代码: private void buttonStartOne_Click(object sender, RoutedEventArgs e) { counterOne = new DispatcherTimer(); counterOne.Tick += new EventHandler(counterOne_Tick); counterOne.Interval = new TimeS
private void buttonStartOne_Click(object sender, RoutedEventArgs e)
{
counterOne = new DispatcherTimer();
counterOne.Tick += new EventHandler(counterOne_Tick);
counterOne.Interval = new TimeSpan(0, 0, 1);
counterOneTime = 10;
counterOne.Start();
}
private void counterOne_Tick(object sender, EventArgs e)
{
// code goes here
if (counterOneTime > 0)
{
counterOneTime--;
labelCounterOne.Content = counterOneTime + "s";
}
else
counterOne.Stop();
}
在上面的示例代码中,倒计时仅为10秒。
我想要的,但不知道的是,我应该如何使它成为:HH:mm:ss,然后让它倒计时。
您会用3个单独的计数器和标签(每个时间单位一个)来完成吗?
或者有什么更好的方法来解决这个问题呢?您可以使用该方法将
时间跨度
转换为字符串。在标签上设置结果字符串您可以使用该方法将时间跨度
转换为字符串。在标签上设置结果字符串公共类TimeController
public class TimeController
{
private static readonly TimeSpan TimeSpan = new TimeSpan(0, 0, 1);
private static int _time;
protected static readonly DispatcherTimer Timer = new DispatcherTimer();
protected static readonly DispatcherTimer BeeperTimer = new DispatcherTimer();
protected static readonly Stopwatch StopWatch = new Stopwatch();
protected static Label TimerLabel;
protected static Button StartButton;
internal static int Time { get { return _time; } set { _time = value; ExtractAndUpdate(); } }
internal static bool Countdown { get; set; }
/// <summary>
/// Static constructor
/// </summary>
static TimeController()
{
BeeperTimer.Interval = TimeSpan;
BeeperTimer.Tick += BeeperTick;
Timer.Interval = TimeSpan;
Timer.Tick += TimerTick;
}
/// <summary>
/// Timer tick event method
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void TimerTick(object sender, EventArgs e)
{
if (Countdown)
if (Time > 0)
{
ExtractAndUpdate();
Time -= 1;
}
else
{
StopRunning();
BeeperTimer.Start();
}
else
ExtractAndUpdate();
}
/// <summary>
/// Start timer and stopwatch
/// </summary>
protected static void StartRunning()
{
Timer.Start();
StopWatch.Start();
StartButton.Content = Labels.Pause;
}
/// <summary>
/// Stop timer and stopwatch
/// </summary>
protected static void StopRunning()
{
Timer.Stop();
StopWatch.Stop();
StartButton.Content = Labels.Start;
}
/// <summary>
/// Beeper event method and label blinking
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void BeeperTick(object sender, EventArgs e)
{
TimerLabel.Visibility = TimerLabel.Visibility.Equals(Visibility.Hidden) ? Visibility.Visible : Visibility.Hidden;
Console.Beep();
}
/// <summary>
/// Extract time and update label
/// </summary>
private static void ExtractAndUpdate()
{
var elapsed = Countdown ? ConvertToTimeSpan() : StopWatch.Elapsed;
UpdateTimeLabel(elapsed);
}
/// <summary>
/// Convert int to TimeSpan
/// </summary>
/// <returns></returns>
internal static TimeSpan ConvertToTimeSpan()
{
var hours = Time / 3600;
var minutes = (Time % 3600) / 60;
var seconds = Time % 60;
return new TimeSpan(hours, minutes, seconds);
}
/// <summary>
/// Update label with data and change color
/// </summary>
/// <param name="elapsed"></param>
protected static void UpdateTimeLabel(TimeSpan elapsed)
{
TimerLabel.Foreground = Brushes.Black;
var time = String.Format(CultureInfo.CurrentCulture, "{0:00h} {1:00m} {2:00s}", elapsed.Hours, elapsed.Minutes, elapsed.Seconds);
if (Countdown && elapsed.TotalMinutes < 1)
TimerLabel.Foreground = Brushes.Red;
TimerLabel.Content = time;
}
}
{
私有静态只读TimeSpan TimeSpan=新TimeSpan(0,0,1);
专用静态整数时间;
受保护的静态只读分派器计时器=新分派器();
受保护的静态只读Dispatchermer蜂鸣器=新Dispatchermer();
受保护的静态只读秒表秒表=新秒表();
受保护的静态标签定时器标签;
受保护的静态按钮启动按钮;
内部静态int-Time{get{return}Time;}set{{u-Time=value;ExtractAndUpdate();}
内部静态布尔倒计时{get;set;}
///
///静态构造函数
///
静态时间控制器()
{
蜂鸣器。间隔=时间间隔;
BeeperTimer.Tick+=BeeperTick;
Timer.Interval=TimeSpan;
Timer.Tick+=TimerTick;
}
///
///计时器勾选事件方法
///
///
///
私有静态void TimerTick(对象发送方、事件参数)
{
如果(倒计时)
如果(时间>0)
{
提取和更新();
时间-=1;
}
其他的
{
停止运行();
BeeperTimer.Start();
}
其他的
提取和更新();
}
///
///启动计时器和秒表
///
受保护静态空隙起始耳轴()
{
Timer.Start();
秒表。开始();
开始按钮。内容=标签。暂停;
}
///
///停车计时器和秒表
///
受保护的静态void StopRunning()
{
Timer.Stop();
秒表;
StartButton.Content=Labels.Start;
}
///
///蜂鸣器事件方法和标签闪烁
///
///
///
私有静态void蜂鸣器(对象发送器,事件参数e)
{
TimerLabel.Visibility=TimerLabel.Visibility.Equals(Visibility.Hidden)?Visibility.Visibility:Visibility.Hidden;
Console.Beep();
}
///
///提取时间并更新标签
///
私有静态void ExtractAndUpdate()
{
var EXPERSED=倒计时?ConvertToTimeSpan():秒表.EXPERSED;
UpdateTimeLabel(已用);
}
///
///将int转换为TimeSpan
///
///
内部静态时间跨度ConvertToTimeSpan()
{
var小时=时间/3600;
var分钟=(时间%3600)/60;
var秒=时间%60;
返回新的时间跨度(小时、分钟、秒);
}
///
///使用数据更新标签并更改颜色
///
///
受保护的静态void UpdateTimeLabel(时间跨度已过)
{
TimerLabel.前台=画笔.黑色;
var time=String.Format(CultureInfo.CurrentCulture,“{0:00h}{1:00m}{2:00s}”,经过.Hours,经过.Minutes,经过.Seconds);
if(倒计时和已用时间。总分钟数<1)
TimerLabel.前台=画笔.Red;
TimerLabel.Content=时间;
}
}
公共类时间控制器
{
私有静态只读TimeSpan TimeSpan=新TimeSpan(0,0,1);
专用静态整数时间;
受保护的静态只读分派器计时器=新分派器();
受保护的静态只读Dispatchermer蜂鸣器=新Dispatchermer();
受保护的静态只读秒表秒表=新秒表();
受保护的静态标签定时器标签;
受保护的静态按钮启动按钮;
内部静态int-Time{get{return}Time;}set{{u-Time=value;ExtractAndUpdate();}
内部静态布尔倒计时{get;set;}
///
///静态构造函数
///
静态时间控制器()
{
蜂鸣器。间隔=时间间隔;
BeeperTimer.Tick+=BeeperTick;
Timer.Interval=TimeSpan;
Timer.Tick+=TimerTick;
}
///
///计时器勾选事件方法
///
///
///
私有静态void TimerTick(对象发送方、事件参数)
{
如果(倒计时)
如果(时间>0)
{
提取和更新();
时间-=1;
}
其他的
{
停止运行();
BeeperTimer.Start();
}
其他的
提取和更新();
}
///
///启动计时器和秒表
///
受保护静态空隙起始耳轴()
{
Timer.Start();
秒表。开始();
开始按钮。内容=标签。暂停;
}
///
///停车计时器和秒表
///
受保护的静态void StopRunning()
{
Timer.Stop();
秒表;
StartButton.Content=Labels.Start;
}
///
///蜂鸣器事件方法和标签闪烁
///
///
///
私有静态void蜂鸣器(对象发送器,事件参数e)
{
TimerLabel.Visibility=TimerLabel.Visibility.Equals(Visibility.Hidden)?Visibility.Visibility:Visibility.Hidden;
Console.Beep();
}
///
///提取时间并更新标签
///
私有静态void ExtractAndUpdate()
{
var EXPERSED=倒计时?ConvertToTimeSpan():秒表.EXPERSED;
UpdateTimeLabel(已用);
}
///
///将int转换为TimeSpan
///
///
内部静态时间跨度ConvertToTimeSpan()
{
var小时=时间/3600;
var分钟=(T