从串行端口事件处理程序内部提高UI事件处理程序

时间:2018-09-23 12:56:25

标签: c# events event-handling serial-port

我有一个简单的Windows Forms应用程序,该应用程序通过串行接口接收遥测,并在一个小窗口中使用条形和数字表示它。

作为C#的一个完整的初学者,并且绝不精通面向对象编程的概念,我主要是通过阅读其他人的代码来将其组合在一起。

该体系结构非常简单实用。我有一个事件处理程序,可以读取和解析传入的字节流,并且在收到完整的消息后,会将全局布尔值设置为true。同时,有一个定期事件检查此全局布尔值是否为真,如果是,则更新显示。我宁愿只是从串行端口事件处理程序中更新显示(这很简单,只需更新一些进度条和标签的值),或者让显示更新事件由收到的消息而不是定期的引发。我也做不到,我努力让自己了解公共/私有/线程机制。

这是我的应用程序的一些伪代码:

namespace ACOM_Controller
{ 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            OpenSerial(); // open serial port with correct speed etc.
            port.DataReceived += Port_OnReceiveData; // DataReceived Event Handler
            // Set up timer with 50ms period for updating display
            System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
            dispatcherTimer.Tick += new EventHandler(OnTimer);
            dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 50);
            dispatcherTimer.Start();
        }

        private static void Port_OnReceiveData(object sender, SerialDataReceivedEventArgs e)
        {
            // Parse and decode telemetry messages over serial port
            // Set NewMessageAvailable = true every time done
        }

        private void OnTimer(object sender, EventArgs e)
        {
            if (NewMessageAvailable)
            {
                // Update displayed dat/bars
                NewMessageAvailable = false;
            }
        }
    }
}

任何帮助或指针将不胜感激。

0 个答案:

没有答案