タイマーコンポーネントタイマータイマー間隔時間-この間隔ごとにイベントがトリガーされます
いちSystem.Windows.Forms.TimerWindows
アプリケーションは、UI
属性間隔時間間隔ms 1000ms = 1s
イベントティック
アプリケーションに基づいて、UI要素を変更するスレッドを占有します。動的時間表示
Windowsアプリケーションの場合は、タイマー機能システムを使用します。 Windows.Forms.Timerが最初の選択肢です。
//每隔指定的时间间隔就会触发
private void timer1_Tick(object sender, EventArgs e)
{
lblDateTime.Text = DateTime.Now.ToString();
}
private void FrmTimer_Load(object sender, EventArgs e)
{
lblDateTime.Text = DateTime.Now.ToString();
timer1.Enabled = true; //启动计时器
}
単一の実行時間が間隔時間を超えると、次のトリガーに影響します。精度が悪い。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・·················································· ···サービスに基づく
System.Timers.Timer
タイマーは軽量であり、
Elapsedイベントは時間間隔でトリガーされます-操作が実行されます-UIスレッドによって実行されません
プロパティ
間隔時間間隔
AutoResetfalseは、trueになるとトリガーされると停止します。デフォルトでは、UI要素を
直接変更する
ことはできません。UI要素のinvoke()を介して行うことができ、UI要素はデリゲートで変更されます- --UI要素を変更します
private void FrmTimer_Load(object sender, EventArgs e)
{
System.Timers.Timer timer3 = new System.Timers.Timer();
timer3.Interval = 1000;
//timer3.AutoReset = false; //只会引发一次,就停止了
timer3.Elapsed += Timer3_Elapsed; //事件
timer3.Start(); //开启计时器
}
int count = 0; //触发次数的终点
private void Timer3_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//不能直接修改UI元素的内容
//lblDt2.Text= DateTime.Now.ToString();
count += 1;
//用委托来进行修改元素内容
Action act = UpdateTime;
this.Invoke(act);
if(count >10)
{
System.Timers.Timer timer = (System.Timers.Timer)sender;
timer.Stop(); //停止计时器
}
}
//委托方法
private void UpdateTime()
{
lblDatatime.Text = DateTime.Now.ToString();
}
時間のかかる操作は、UIが応答しなくなることはなく、次のトリガーに影響を与えません
おさんSystem.Threading.Timer
マルチスレッドタイマーは軽量で高精度
指定された時間間隔でスレッドプールスレッドでメソッドを実行するためのメカニズムを提供します。
1回の実行が長すぎるため、次のトリガーには影響しません。コールバックメソッドが操作を実行します。
//System.Threading.Timer timer4;
private void FrmTimer_Load(object sender, EventArgs e)
{
//多线程
//period 时间间隔 0或-1 只会执行一 次,然后就停止
//Change 可以让计时器重新启动
//停止 ①period 0 -1 ②timer4.Dispose()
int count2 = 0;
timer4 = new System.Threading.Timer(new System.Threading.TimerCallback(o => {
count2 += 2;
Action<int> act = ShowCount;
this.Invoke(act, count2);
}), null, 1000,1000);
//参数 回调函数,执行对象,延迟启动时间,触发时间间隔
//timer4.Change(2000, 2000); //改变延迟启动时间和时间间隔
}
//委托函数
private void ShowCount(int cout)
{
txtCount.Text = cout.ToString();
if (cout > 50)
timer4.Dispose();
}
UI要素を直接変更することはできません。また、UIスレッドで実行されているUI要素のinvoke()によって実装することもできません。