C#裡面的三種Timer
在.net中有三種計時器,一是System.Windows.Forms名稱空間下的Timer控制元件,它直接繼承自Componet;二是System.Timers名稱空間下的Timer類。
Timer控制元件:Timer控制元件只有繫結了Tick事件,和設定Enabled=True後才會自動計時,停止計時可以用Stop()控制,通過Stop()停止之後,如果想重新計時,可以用Start()方法來啟動計時器。Timer控制元件和它所在的Form屬於同一個執行緒;
System.Timers.Timer類:定義一個System.Timers.Timer物件,繫結Elapsed事件,通過Start()方法啟動計時,通過Stop()方法或者Enable=False停止計時。AutoReset屬性設定是否重複計時。Elapsed事件繫結就相當另開了一個執行緒,也就是說在Elapsed繫結的事件裡不能訪問其它執行緒裡的控制元件。
System.Threading.Timer:定義該類時,主要有四個引數。TimerCallBack,一個返回值為void,引數為object的委託,也是計時器執行的方法。Object state,計時器執行方法的的引數。 int dueTime,呼叫 callback 之前延遲的時間量(以毫秒為單位)。指定 Timeout.Infinite 以防止計時器開始計時。指定零 (0) 以立即啟動計時器。
int Period,呼叫 callback 的時間間隔(以毫秒為單位)。指定 Timeout.Infinite 可以禁用定期終止。
在這三種計時器中,第一種計時器和所在的Form處於同一個執行緒,因此執行的效率不高。而第二種和第三中計時器執行的方法都是新開一個執行緒,所以執行效率比第一種計時器要好。因此在使用計時器時,建議使用第二種和第三種。
下面是三中定時器使用的例子
1)Timer控制元件
public partial class Timer : Form
{
int count = 0;
public Timer()
{
InitializeComponent();
//timer控制元件可用
this.timer1.Enabled = true;
//設定timer控制元件的Tick事件觸發的時間間隔
this.timer1.Interval = 1000;
//停止計時
this.timer1.Stop();
}
private void timer1_Tick(object sender, EventArgs e)
{
count += 1;
this.tbTimer.Text = count.ToString();
}
private void btStart_Click(object sender, EventArgs e)
{
//開始計時
this.timer1.Start();
}
private void btStop_Click(object sender, EventArgs e)
{
//停止計時
this.timer1.Stop();
}
}
2)System.Timers.Timer
public partial class Timer : Form
{
int count = 0;
private System.Timers.Timer timer = new System.Timers.Timer();
public Timer()
{
InitializeComponent();
//設定timer可用
timer.Enabled = true;
//設定timer
timer.Interval = 1000;
//設定是否重複計時,如果該屬性設為False,則只執行timer_Elapsed方法一次。
timer.AutoReset = true;
timer.Elapsed+=new System.Timers.ElapsedEventHandler(timer_Elapsed);
}
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
count += 1;
SetTB(count.ToString());
}
private void btStart_Click(object sender, EventArgs e)
{
timer.Start();
}
private void btStop_Click(object sender, EventArgs e)
{
timer.Stop();
}
private delegate void SetTBMethodInvok(string value);
private void SetTB(string value)
{
if (this.InvokeRequired)
{
this.Invoke(new SetTBMethodInvok(SetTB), value);
}
else
{
this.tbTimer.Text = value;
}
}
}
3) System.Threading.Timer
public partial class Timer : Form
{
int count = 0;
System.Threading.Timer timerThr;
private delegate void SetTBMethodInvoke(object state);
public Timer()
{
InitializeComponent();
//初始化一個計時器,一開始不計時,呼叫Callback的時間間隔是500毫秒
timerThr = new System.Threading.Timer(new TimerCallback(SetTB), null, Timeout.Infinite, 500);
}
public void SetTB(object value)
{
if (this.InvokeRequired)
{
this.Invoke(new SetTBMethodInvoke(SetTB), value);
}
else
{
count += 1;
this.tbTimer.Text = count.ToString();
}
}
private void btStart_Click(object sender, EventArgs e)
{
//開始計時
timerThr.Change(0, 500);
}
private void btStop_Click(object sender, EventArgs e)
{
//停止計時
timerThr.Change(Timeout.Infinite, 500);
}
}
相關文章
- Timer(C#)C#
- .NET中的三種Timer的區別和用法
- C#裡面的網頁檢視元件的運用C#網頁元件
- C# 三種序列化C#
- C#不可在類外觸發類裡面的靜態事件C#事件
- Selenium裡的三種等待方式
- Go 裡面的 ^ 和 &^Go
- C# 的三種序列化方法C#
- C# Timer用法及例項詳解C#
- 傑裡之sys_timer 流程框架【篇】框架
- 三種觀察者模式的C#實現模式C#
- angular8裡面的*ngSwitchAngular
- 聊聊Go裡面的閉包Go
- 獲取cookie裡面的值Cookie
- $(function{})裡面的onclick報錯Function
- 遊戲裡面的容斥原理遊戲
- php 呼叫dll 裡面的方法PHP
- vue專案重新整理當前頁面的三種方法Vue
- 傑裡之usr_timer 刪除介面【篇】
- 父頁面如何輸出iframe裡面的變數,或者呼叫iframe裡面的方法?變數
- 關於C#委託三種呼叫的分享C#
- C#中陣列的三種訪問方式C#陣列
- 使用C#建立webservice及三種呼叫方式 (轉)C#Web
- C#中介面的繼承C#繼承
- c# winform之手工定時器timer操作示例C#ORM定時器
- 如何獲取 alter 裡面的字串?字串
- elasticsearch裡面的內容搜尋Elasticsearch
- v$database裡面的created列值Database
- Oracle中SQL裡面的Help命令OracleSQL
- TSM裡面的sql語句(轉)SQL
- Oracle裡面的user被lock了Oracle
- 三種東西永遠不要放到資料庫裡資料庫
- 三種好用的controller跳轉thmleaf頁面的方法總結!!Controller
- 想要影片裡的音樂,如何提取裡面的音訊?音訊
- 如何驗證 elk 裡面的資料?
- 如何調整Docker裡面的Image 大小?Docker
- packagereference 裡面的資產是怎麼回事?Package
- 關於模組裡面的註冊中心