[英]How to call a method every x seconds for x time in Xamarin Forms?
[英]Which is the best practice to call a method every x seconds?
我有一個控制並與微處理器通信的程序。 程序將命令發送到微處理器,並在發送命令的同時接收反饋,並在各個文本框中顯示該命令。此命令由命令控件激活/觸發。 現在,我需要實現一些與命令無關的反饋,因此該反饋不會被用戶激活(電流和溫度測量),但與微控制器控制的機器狀態相關。 我不喜歡將消息的發送時間安排在微端的想法,我寧願接收信息並在PC端每隔x秒處理一次。 這樣,我還可以包括一個用於不同更新間隔的選擇器。 我正在控制電機和加熱器。
問題是:哪種最佳方法是調用相關類來處理此類消息(當前和溫度),計時器,帶有計時器的新線程,backgroundworker等。
接口:我建議您在控制器類中創建諸如startPoll()
和endPoll()
類的東西:這是唯一的地方,在這里所有避免重復調用,交織等必要信息都在范圍內。
實現:我建議分離一個專用線程:線程池和其他內置機制不是為工作而設計的,它們與應用程序的其余部分具有高度的獨立性(例如與其他硬件進行通信)。 這個線程可以通過啟動startPoll()
並暗示將結束endPoll()
計時器:我絕對不建議您使用計時器-如果一個檢查的時間比等待下一個檢查的時間長(或者您需要管道代碼來避免這種情況),則直接進入並行呼叫地獄。 我建議您在開始工作周期之前,然后在停止信號上的WaitOne()
完成之后,計算最短的下一次開始時間,以得出剩余時間。
我想一個計時器可以解決它。但是,不是任何計時器,而是System.Threading命名空間中的計時器。
http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx
按照您的建議,我已實現此代碼:
public Form1()
{
InitializeComponent();
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Tick += OnTimerTick;
timer.Interval = 5000;
timer.Start();
}
private void OnTimerTick(object sender, EventArgs e)
{
// I will fire the events here
MessageBox.Show("5 seconds elapsed");
}
該代碼顯然可以正常工作,但是我不確定這是否符合您的建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.