我有一个控制微处理器并与之通信的程序。程序向微处理器发送命令并在发送命令的同时接收反馈,在各种文本框中显示相同的命令。这由命令控制激活/触发。 我现在需要实现一些与命令无关的反馈,因此不会被用户激活(电流和温度测量),但与微控制的机器状态相关。 我不喜欢将消息定时发送到微观方面的想法,我宁愿接收信息并在PC端每x秒处理一次。通过这种方式,我还可以包含一个用于不同更新间隔的选择器。 我正在控制电机和加热器。
问题是:哪个是调用相关类来处理这些消息(当前和温度),计时器,带有计时器的新线程,后台工作者,还是其他什么的最佳实践?
答案 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");
}
代码显然有效,但我不确定这是否与您的建议一致。