每隔x秒调用一个方法的最佳做法是什么?

时间:2013-05-04 19:08:31

标签: c# multithreading timer backgroundworker

我有一个控制微处理器并与之通信的程序。程序向微处理器发送命令并在发送命令的同时接收反馈,在各种文本框中显示相同的命令。这由命令控制激活/触发。 我现在需要实现一些与命令无关的反馈,因此不会被用户激活(电流和温度测量),但与微控制的机器状态相关。 我不喜欢将消息定时发送到微观方面的想法,我宁愿接收信息并在PC端每x秒处理一次。通过这种方式,我还可以包含一个用于不同更新间隔的选择器。 我正在控制电机和加热器。

问题是:哪个是调用相关类来处理这些消息(当前和温度),计时器,带有计时器的新线程,后台工作者,还是其他什么的最佳实践?

3 个答案:

答案 0 :(得分:4)

界面:我建议您在控制器类中创建startPoll()endPoll()之类的内容:这是唯一可以避免多次调用的所有必要信息,交错等在范围内。

实施:我建议脱离专用线程:线程池和其他内置机制不是为工作而设计的,它与应用程序的其余部分具有高度的独立性(例如与其他硬件通信)。此线程可以由startPoll()启动,并通过endPoll()发送信号。

计时器:我绝对不建议使用计时器 - 你直接进入并行呼叫地狱,如果一次检查花费的时间比等待下一次检查要长(或者你需要管道代码来避免那样)。我建议您在开始工作周期之前计算最下一个开始时间,然后在停止信号上完成WaitOne()剩余时间。

答案 1 :(得分:1)

我想计时器会解决它..但不是任何计时器,而是System.Threading命名空间中的计时器。

http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx

答案 2 :(得分:0)

根据您的建议,我实施了以下代码:

        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");
        }

代码显然有效,但我不确定这是否与您的建议一致。