![](/img/trans.png)
[英]VisualStudio Visual C# DataReceived Firing Erratically (Receiving Data From Arduino)
[英]Multithreading in C# Visual Studio and receiving data from serialport connected to arduino
谁能告诉我我在做什么错? 我收到一条错误消息,说无法在线程上访问tbOutput?
我猜这是关于它没有安全执行的问题。 我该如何解决此错误?
private void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
this.demoThread = new Thread(new ThreadStart(this.ThreadProcSafe));
this.demoThread.Start();
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
tbOutput.Text = indata;
}
private void ThreadProcSafe()
{
this.SetText("Something happened correctly");
}
private void SetText(string text)
{
if (this.tbOutput.InvokeRequired)
{
SetTextCallBack d = new SetTextCallBack(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.tbOutput.Text = text;
}
}
由于您的DataReceivedHandler
是在非UI线程上调用的,因此您可能会收到错误。 如以下所述: https : //msdn.microsoft.com/zh-cn/library/system.io.ports.serialport.datareceived ( v = vs.110) .aspx (“备注”部分)
如果使用的是.NET 4,则可以执行以下操作:
tbOutput.Text = indata
你应该做:
tbOutput.Invoke(new Action(() => tbOutput.Text = indata));
而且您不需要额外的线程
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.