我有一个简单的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;
}
}
}
}
任何帮助或指针将不胜感激。