C#定时器
<p><span style="font-family: 幼圆">C#常用的五种定时器分别是:</span></p><ul>
<li><span style="font-family: 幼圆">System.Timers.Timer</span></li>
<li><span style="font-family: 幼圆">System.Threading.Timer</span></li>
<li><span style="font-family: 幼圆">System.Windows.Threading.DispatcherTimer : WPF应用程序</span></li>
<li><span style="font-family: 幼圆">System.Windows.Forms.Timer :WinForm应用程序</span></li>
<li><span style="font-family: 幼圆">System.Diagnostics.Stopwatch :计时器</span></li>
</ul>
<p><span style="font-family: 幼圆">一、 System.Timers.Timer</span></p>
<p><span style="font-family: 幼圆">定义:基于时间间隔的定时器,可以在一定时间间隔内一直重复执行。它使用Elapsed事件来通知定时器已经过去了指定的时间,并执行所需的操作。</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">using System.Timers;<br><br>static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Main(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">[] args)
{
Timer timer </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> Timer(<span style="color: rgba(128, 0, 128, 1)">1000</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1秒钟的时间间隔</span>
timer.Elapsed +=<span style="color: rgba(0, 0, 0, 1)"> OnTimedEvent;
timer.AutoReset </span>= <span style="color: rgba(0, 0, 255, 1)">true</span>;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">重复执行</span>
timer.Enabled = <span style="color: rgba(0, 0, 255, 1)">true</span>;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">启动定时器</span>
<span style="color: rgba(0, 0, 0, 1)">
Console.WriteLine(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">按任意键退出</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
Console.ReadKey();
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> OnTimedEvent(Object source,ElapsedEventArgs e)
{
Console.WriteLine(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">定时器事件触发,当前时间:</span><span style="color: rgba(128, 0, 0, 1)">"</span> +<span style="color: rgba(0, 0, 0, 1)"> DateTime.Now.ToString());
}</span></pre>
</div>
<p><span style="font-family: 幼圆">二、System.Threading.Timer</span></p>
<p><span style="font-family: 幼圆">定义:基于线程池的定时器,可以在一定时间间隔内一直重复执行。它使用Callback委托来通知定时器已经过去了指定的时间,并执行所需的操作。</span></p>
<div><span style="font-family: 幼圆">public Timer(TimerCallback callback, object state, int dueTime, int period):创建一个新的Timer实例,该实例在指定时间间隔内定期调用回调方法,并传递一个对象作为参数。</span></div>
<div>
<ul>
<li><span style="font-family: 幼圆">TimerCallback:回调方法,每次定时器调用时都会执行。</span></li>
<li><span style="font-family: 幼圆">object:传递给回调方法的参数。</span></li>
<li><span style="font-family: 幼圆">int:指定第一次调用回调方法的延迟时间(以毫秒为单位)。</span></li>
<li><span style="font-family: 幼圆">int:指定每次调用回调方法的时间间隔(以毫秒为单位),Timeout.Infinite表示无限长等待时间。</span></li>
</ul>
<p><span style="font-family: 幼圆">public bool Change(int dueTime, int period):修改开始时间和间隔时间</span></p>
<ul>
<li><span style="font-family: 幼圆">timer.Change(5000, Timeout.Infinite);5s后执行一次定时器</span></li>
<li><span style="font-family: 幼圆">timer.Change(-1, Timeout.Infinite);禁用定时器,定时器不再触发任何事件</span></li>
</ul>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Threading;
</span><span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Main(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">[] args)
{
Timer timer </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> Timer(<span style="color: rgba(0, 0, 255, 1)">new</span> TimerCallback(OnTimedEvent),<span style="color: rgba(0, 0, 255, 1)">null</span>,<span style="color: rgba(128, 0, 128, 1)">0</span>,<span style="color: rgba(128, 0, 128, 1)">1000</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1秒钟的时间间隔</span>
Console.WriteLine(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">按任意键退出</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
Console.ReadKey();
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> OnTimedEvent(<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> state)
{
Console.WriteLine(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">定时器事件触发,当前时间:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+<span style="color: rgba(0, 0, 0, 1)">DateTime.Now.ToString());
}</span></pre>
</div>
<p><span style="font-family: 幼圆">三、System.Windows.Threading.DispatcherTimer</span></p>
<p><span style="font-family: 幼圆">定义:在UI线程上运行,并在指定的时间间隔内引发事件。它通常用于定期更新UI元素或执行其他UI相关任务。</span></p>
<p><span style="font-family: 幼圆">使用:</span></p>
<ul>
<li><span style="font-family: 幼圆">使用Interval属性设置定时器的时间间隔;</span></li>
<li><span style="font-family: 幼圆">注册Tick事件来通知定时器执行所需的操作;</span></li>
<li><span style="font-family: 幼圆">使用Start启动定时器;</span></li>
<li><span style="font-family: 幼圆">使用Stop暂停定时器;</span></li>
</ul>
<p><span style="font-family: 幼圆">注意:需要注意的是,由于DispatcherTimer是与UI线程关联的计时器,因此在处理事件时需要注 意不要阻塞UI线程,避免造成界面卡顿的问题。</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Windows.Threading;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">partial</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MainWindow : Window
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> MainWindow()
{
InitializeComponent();
DispatcherTimer timer </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> DispatcherTimer();
timer.Interval </span>= TimeSpan.FromSeconds(<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
timer.Tick </span>+=<span style="color: rgba(0, 0, 0, 1)"> TimerTick;
timer.Start();
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span> TimerTick(<span style="color: rgba(0, 0, 255, 1)">object</span><span style="color: rgba(0, 0, 0, 1)"> sender, EventArgs e)
{
lbl.Content </span>=<span style="color: rgba(0, 0, 0, 1)"> DateTime.Now.ToString();
}
}</span></pre>
</div>
<p><span style="font-family: 幼圆">四、System.Windows.Forms.Timer</span></p>
<p><span style="font-family: 幼圆">定义:基于窗体的定时器,只能<strong>在Windows Forms应用程序中</strong>使用。它使用Tick事件来通知定时器已经过去了指定的时间,并执行所需的操作。</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Windows.Forms;
</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Program : Form
{
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Timer timer;
</span><span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Main(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">[] args)
{
Application.Run(</span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Program());
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Program()
{
timer </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Timer();
timer.Interval </span>= <span style="color: rgba(128, 0, 128, 1)">1000</span>; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1秒钟的时间间隔</span>
timer.Tick +=<span style="color: rgba(0, 0, 0, 1)"> OnTimedEvent;
timer.Start();
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.Text = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">定时器示例</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.Size = <span style="color: rgba(0, 0, 255, 1)">new</span> System.Drawing.Size(<span style="color: rgba(128, 0, 128, 1)">200</span>, <span style="color: rgba(128, 0, 128, 1)">200</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> OnTimedEvent(Object source, EventArgs e)
{
Console.WriteLine(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">定时器事件触发,当前时间:</span><span style="color: rgba(128, 0, 0, 1)">"</span> +<span style="color: rgba(0, 0, 0, 1)"> DateTime.Now.ToString());
}
}</span></pre>
</div>
<p><span style="font-family: 幼圆">五、System.Diagnostics.Stopwatch</span></p>
<p><span style="font-family: 幼圆">定义:是一个高精度计时器,可以测量代码执行时间,但不是一个真正的计时器。它使用Start方法开始计时,使用Stop方法停止计时,并使用Elapsed属性获取经过的时间。</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> System.Diagnostics;
</span><span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Main(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">[] args)
{
Stopwatch stopwatch </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Stopwatch();
stopwatch.Start();
</span><span style="color: rgba(0, 0, 255, 1)">int</span> sum = <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">int</span> i = <span style="color: rgba(128, 0, 128, 1)">0</span>; i < <span style="color: rgba(128, 0, 128, 1)">100000000</span>;i++<span style="color: rgba(0, 0, 0, 1)">)
{
sum </span>= sum +<span style="color: rgba(0, 0, 0, 1)"> i;
}
stopwatch.Stop();
Console.WriteLine(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">代码执行时间:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+stopwatch.ElapsedMilliseconds+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">毫秒</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
}</span></pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/LXLR/p/17696125.html
頁:
[1]