簡體   English   中英

每x秒調用一次方法的最佳實踐是哪種?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM