我来自嵌入式域名,需要为我的设备制作GUI。我已经在C中为设备编写了固件,并使用Visual C #Windows Form Application制作了GUI应用程序。设备正在以100ms的速度向串口发送数据,我正在尝试以winforms格式接收数据。
数据:
10Q20Q30Q40Q50Q60Q70Q80Q90Q100Q110Q120Q130Q140Q150Q
我已经编写了以下C#代码来接收它。
public Form1()
{
InitializeComponent();
//Using data receive event handler to receive data
serialPort1.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);
}
然后在comPort_DataReceived
我调用了Read()
void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Read();
}
delegate void Callbackmessage();
void Read()
{
if (this.InvokeRequired)
{
Callbackmessage abc = new Callbackmessage(Read);
this.Invoke(abc);
}
else
{
String data = serialPort1.ReadLine();
}
最后,我正在阅读数据并将其保存到String data
。该应用程序工作正常但它挂起像按钮在1秒后响应。如果我对此行String data = serialPort1.ReadLine();
发表评论,那么该应用程序可以顺利运行。为什么应用程序挂起。我不知道从串口接收数据的任何其他方式。请帮忙。感谢。
答案 0 :(得分:0)
您可以使用后台工作人员。 https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.110).aspx 并在bacground worker RunAsync中进行读取 e.Result = serial.ReadLine() 在backgroundWorker1_RunWorkerCompleted eventHandler中,您可以获取信息并将其报告回客户端
答案 1 :(得分:0)