嗨,我在这里有一个简单的程序,但它无法正常工作 当我在串口上收到“A”时,我设置了checkbox1,当'a'时,我取消设置checkbox1。
public partial class MainWindow : Window
{
public static SerialPort sp = new SerialPort();
public MainWindow()
{
InitializeComponent();
sp.BaudRate = 2400;
sp.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Prijem);
if (!sp.IsOpen)
sp.Open();
}
private delegate void UpdateUiTextDelegate(char text);
private void Prijem(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
char c = (char)sp.ReadChar();
Dispatcher.Invoke(DispatcherPriority.Send,
new UpdateUiTextDelegate(WriteData), c);
}
private void WriteData(char c)
{
if (c == 'A')
{
checkBox1.IsChecked = true;
}
else if (c == 'a')
{
checkBox1.IsChecked = false;
}
}
}
答案 0 :(得分:1)
串行端口属性未全部设置。分配端口号。
答案 1 :(得分:1)
当抛出DataReceived
事件时,不能保证缓冲区内有多少个字符。因此,如果您只是调用ReadChar()
,则不会读取缓冲区的完整内容。因此,如果字符发送速度非常快,则可能会遗漏某些内容,导致在缓冲区中有两个或更多字符时调用事件处理程序。
此外,您应设置所有串口属性,而不仅仅是波特率。这是必需的,因为串行端口没有默认状态,并且仍将是每个参数的最后一个设置选项。因此,如果您使用某些终端程序来更改一些较少使用的设置(如Xon / off,HW Handshake,StartBits等),如果您不将它们重置为所需的值,程序将只使用相同的设置。