时间:2021-07-01 10:21:17 帮助过:42人阅读
- <br>Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 using System; <br>using System.Collections.Generic; <br>using System.Linq; <br>using System.Text; <br>namespace CountDown <br>{ <br>/// <summary> <br>/// 实现倒计时功能的类 <br>/// </summary> <br>public class ProcessCount <br>{ <br>private Int32 _TotalSecond; <br>public Int32 TotalSecond <br>{ <br>get { return _TotalSecond; } <br>set { _TotalSecond = value; } <br>} <br>/// <summary> <br>/// 构造函数 <br>/// </summary> <br>public ProcessCount(Int32 totalSecond) <br>{ <br>this._TotalSecond = totalSecond; <br>} <br>/// <summary> <br>/// 减秒 <br>/// </summary> <br>/// <returns></returns> <br>public bool ProcessCountDown() <br>{ <br>if (_TotalSecond == 0) <br>return false; <br>else <br>{ <br>_TotalSecond--; <br>return true; <br>} <br>} <br>/// <summary> <br>/// 获取小时显示值 <br>/// </summary> <br>/// <returns></returns> <br>public string GetHour() <br>{ <br>return String.Format("{0:D2}", (_TotalSecond / 3600)); <br>} <br>/// <summary> <br>/// 获取分钟显示值 <br>/// </summary> <br>/// <returns></returns> <br>public string GetMinute() <br>{ <br>return String.Format("{0:D2}", (_TotalSecond % 3600) / 60); <br>} <br>/// <summary> <br>/// 获取秒显示值 <br>/// </summary> <br>/// <returns></returns> <br>public string GetSecond() <br>{ <br>return String.Format("{0:D2}", _TotalSecond % 60); <br>} <br>} <br>} <br> <br><strong>窗口界面设计文件MainWin.xaml</strong>: <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 <Window x:Class="CountDown.MainWin" <br>xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <br>xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="400" Width="800" HorizontalAlignment="Center" VerticalAlignment="Center" <br>Title=" " Topmost="True" WindowStyle="None" Background="Transparent" AllowsTransparency="True" WindowStartupLocation="CenterScreen"> <br><Grid> <br><Grid.ColumnDefinitions> <br><ColumnDefinition /> <br><ColumnDefinition Width="40"/> <br><ColumnDefinition /> <br><ColumnDefinition Width="40"/> <br><ColumnDefinition /> <br></Grid.ColumnDefinitions> <br><TextBlock Text="00" Name="HourArea" VerticalAlignment="Center" FontSize="180" Background="Red" Grid.Column="0"/> <br><TextBlock Text=":" Name="HourSplitMinute" VerticalAlignment="Center" FontSize="180" Background="Red" Grid.Column="1"/> <br><TextBlock Text="10" Name="MinuteArea" VerticalAlignment="Center" FontSize="180" Background="Red" Grid.Column="2" /> <br><TextBlock Text=":" Name="MinuteSplitSecond" VerticalAlignment="Center" FontSize="180" Background="Red" Grid.Column="3"/> <br><TextBlock Text="00" Name="SecondArea" VerticalAlignment="Center" FontSize="180" Background="Red" Grid.Column="4"/> <br></Grid> <br></Window> <br> <br><strong>窗口界面逻辑设计文件:MainWin.xaml.cs</strong>: <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 using System; <br>using System.Collections.Generic; <br>using System.Linq; <br>using System.Text; <br>using System.Windows; <br>using System.Windows.Controls; <br>using System.Windows.Data; <br>using System.Windows.Documents; <br>using System.Windows.Input; <br>using System.Windows.Media; <br>using System.Windows.Media.Imaging; <br>using System.Windows.Shapes; <br>using System.Windows.Threading; <br>namespace CountDown <br>{ <br>/// <summary> <br>/// Interaction logic for MainWin.xaml <br>/// </summary> <br>public partial class MainWin : Window <br>{ <br>private DispatcherTimer timer; <br>private ProcessCount processCount; <br>public MainWin() <br>{ <br>InitializeComponent(); <br>this.Loaded += new RoutedEventHandler(MainWin_Loaded); <br>} <br>/// <summary> <br>/// 窗口加载事件 <br>/// </summary> <br>/// <param name="sender"></param> <br>/// <param name="e"></param> <br>private void MainWin_Loaded(object sender, RoutedEventArgs e) <br>{ <br>//设置定时器 <br>timer = new DispatcherTimer(); <br>timer.Interval = new TimeSpan(10000000); //时间间隔为一秒 <br>timer.Tick += new EventHandler(timer_Tick); <br>//转换成秒数 <br>Int32 hour= Convert.ToInt32(HourArea.Text); <br>Int32 minute = Convert.ToInt32(MinuteArea.Text); <br>Int32 second = Convert.ToInt32(SecondArea.Text); <br>//处理倒计时的类 <br>processCount = new ProcessCount(hour*3600+minute*60+second); <br>CountDown += new CountDownHandler(processCount.ProcessCountDown); <br>//开启定时器 <br>timer.Start(); <br>} <br>/// <summary> <br>/// Timer触发的事件 <br>/// </summary> <br>/// <param name="sender"></param> <br>/// <param name="e"></param> <br>private void timer_Tick(object sender, EventArgs e) <br>{ <br>if (OnCountDown()) <br>{ <br>HourArea.Text = processCount.GetHour(); <br>MinuteArea.Text = processCount.GetMinute(); <br>SecondArea.Text = processCount.GetSecond(); <br>} <br>else <br>timer.Stop(); <br>} <br>/// <summary> <br>/// 处理事件 <br>/// </summary> <br>public event CountDownHandler CountDown; <br>public bool OnCountDown() <br>{ <br>if (CountDown != null) <br>return CountDown(); <br>return false; <br>} <br>} <br>/// <summary> <br>/// 处理倒计时的委托 <br>/// </summary> <br>/// <returns></returns> <br>public delegate bool CountDownHandler(); <br>} <br> <br>鉴于代码中注释的比较详细,所以笔者也不再一一赘述了,希望对大家能有所帮助。完整的工程包下载:http://xiazai.jb51.net/201212/yuanma/CountDown_jb51.rar。 <br><br><strong>实例二</strong>:<br>效果:<br><img height="36" src="https://img.gxlcms.com//Uploads-s/new/2019-09-19-201919/20121227144327378.png" width="168"> <br>UI:放置一个Label ---><Label Name="lblSecond" FontSize="20" Foreground="Red" ></Label> <br>CS: <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br> private int countSecond=300; //记录秒数 <br> private void UserControl_Loaded(object sender, RoutedEventArgs e) <br> { <br> private DispatcherTimer disTimer = new DispatcherTimer(); <br> disTimer.Interval = new TimeSpan(0, 0, 0, 1); //参数分别为:天,小时,分,秒。此方法有重载,可根据实际情况调用。 <br> disTimer.Tick += new EventHandler(disTimer_Tick); //每一秒执行的方法 <br> disTimer.Start(); <br> } <br> void disTimer_Tick(object sender, EventArgs e) <br> { <br> if(countSecond==0) <br> { <br> MessageBox.Show("结束"); <br> } <br> else <br> { <br> //判断lblSecond是否处于UI线程上 <br> if (lblSecond.Dispatcher.CheckAccess()) <br> { <br> lblSecond.Content=countSecnd.ToString(); <br> } <br> else <br> { <br> lblSecond.Dispatcher.BeginInvoke(DispatcherPriority.Normal,(Action)(() =>{ <br> lblSecond.Content=countSecond.ToString(); <br> })); <br> } <br> countSecond--; <br> } <br> } <br></li><li> </li><li> </li></ol></pre></li></ol></pre></li></ol></pre>