0

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

问题是:调用相关类来处理此类消息(电流和温度)、计时器、带有计时器的新线程、后台工作程序等其他东西的最佳实践是什么?

4

3 回答 3

4

接口:我建议你在你的控制器类中创建类似的东西startPoll()endPoll()这是唯一的地方,所有必要的信息都在范围内,以避免多次调用、交错等。

实现:我建议分离一个专用线程:线程池和其他内置机制不是为工作而设计的,它与应用程序的其余部分高度独立(例如与其他硬件通信)。该线程可以由 开始并由startPoll()发出信号以结束endPoll()

定时器:我绝对不推荐使用定时器——如果一次检查的时间比等待下一次检查的时间长(或者你需要管道代码来避免这种情况),你会直接进入并行调用地狱。我建议您在开始工作周期之前计算最接近的下一次开始时间,然后在完成WaitOne()剩余时间的停止信号时计算。

于 2013-05-04T19:19:52.850 回答
1

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

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

于 2013-05-04T19:14:33.157 回答
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");
        }

该代码显然可以正常工作,但我不确定这是否符合您的建议。

于 2013-05-05T08:03:54.040 回答