C# timer時間控制元件 關於迴圈的使用
阿新 • • 發佈:2018-11-19
1.在某些情況下,while之類的迴圈會造成卡頓,如果是無限迴圈,甚至會卡死程式,即便在迴圈中間使用thread.sleep(1000)停頓,也並不能解決問題。
2.c#的system包中原本就有一個timers控制元件,使用它可以完美解決問題1,甚至可以作為一個執行緒定期執行業務。我的業務需求是不停的請求感測器,給感測器傳送指令,接收其資料。
3.具體程式碼:
System.Timers.Timer aTimer = new System.Timers.Timer(); private void con_select(object sender, RoutedEventArgs e) { //到時間的時候執行事件 aTimer.Elapsed += new System.Timers.ElapsedEventHandler(sendControl); aTimer.Interval = 500; aTimer.AutoReset = true;//執行一次 false,一直執行true //是否執行System.Timers.Timer.Elapsed事件 aTimer.Enabled = true; } private void sendControl(object source, System.Timers.ElapsedEventArgs e) { //獲取xyz角度的命令 byte[] contol = modbus.getXYZ(); comm.WritePort(contol, 0, contol.Length); }
停止timer控制元件:
private void stop(object sender, RoutedEventArgs e)
{
aTimer.Stop();
}