以下是自动读取串口的非常简单的代码:-
public partial class MainForm : Form
{
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
serialPort1.PortName="COM11";
serialPort1.Open();
}
void SerialPort1DataReceived(object sender, SerialDataReceivedEventArgs e)
{
rtBox.Text="Data Received\n";
}
void BtnReadClick(object sender, EventArgs e)
{
rtBox.Text += "Read click" + "\n";
}
System.InvalidOperationException:跨执行绪作业无效:访问控制项'rtBox'时所使用的执行绪与建立控制项的执行绪不同。
Google的英文翻译是汉字翻译
“未完成的线程作业:用于访问控件'rtBox'的线程与建立控件的线程不同。”
我只想在Rich测试框中显示消息“数据接收”。但是,无论何时接收到数据,都会出现以下异常:
你知道为什么吗?谢谢
最佳答案
WinForm控件(例如,您的富文本框)只能从主UI线程访问。您的串行端口对象正在从另一端口调用事件处理程序。
您可以更改处理程序以执行以下操作-
void SerialPort1DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Invoke(new Action(() =>
{
rtBox.Text="Data Received\n";
}));
}
这将使用Control.Invoke,然后将在UI线程中运行内部代码。
关于c# - 在C#中自动读取串口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43939358/