串口简单

时间:2012-03-29 12:45:09

标签: c# checkbox serial-port

嗨,我在这里有一个简单的程序,但它无法正常工作 当我在串口上收到“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;
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

串行端口属性未全部设置。分配端口号。

答案 1 :(得分:1)

当抛出DataReceived事件时,不能保证缓冲区内有多少个字符。因此,如果您只是调用ReadChar(),则不会读取缓冲区的完整内容。因此,如果字符发送速度非常快,则可能会遗漏某些内容,导致在缓冲区中有两个或更多字符时调用事件处理程序。

此外,您应设置所有串口属性,而不仅仅是波特率。这是必需的,因为串行端口没有默认状态,并且仍将是每个参数的最后一个设置选项。因此,如果您使用某些终端程序来更改一些较少使用的设置(如Xon / off,HW Handshake,StartBits等),如果您不将它们重置为所需的值,程序将只使用相同的设置。