我正在使用Visual Studio 2017,我有一个RichTextBox,当我设置它时不显示文本:
public void ArduinoDataRecived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
SerialPort TempSerial = (SerialPort)sender;
ConsoleTextBox.AppendText(TempSerial.ReadLine());
}
代码运行时没有错误,每当我调用MessageBox.Show(ConsoleTextBox.text)
时,它都会显示串口发送的文本,但文本框不会显示。
如果我有一个完全不同的设置文本的方法,那么它有效吗?
答案 0 :(得分:0)
可能是线程问题。这是来自the documentation的复制粘贴:
当数据出现时,在辅助线程上引发DataReceived事件 从SerialPort对象接收。因为这个事件是在一个 辅助线程,而不是主线程,试图修改一些 主线程中的元素,如UI元素,可以引发一个 线程异常。如果有必要修改main中的元素 表单或控件,使用Invoke发回更改请求,这样做 正确的线程上的工作。
P.S。在使用System.IO.Ports.SerialPort之前,请确保to read this。 And this。不幸的是,.NET 4.5.2中仍然没有解决这些问题。不久前,我将我的串口通信代码从C#移植到C ++,使我的软件可以为所有用户可靠地工作。但是,如果它适用于您的计算机,并且您没有使用商业软件,则System.IO.Ports.SerialPort可能仍适用于您。