我正在使用Visual Studio 2015并使用C#进行编码。
我已经在pic32上编程了一个时钟,并通过串口发送了这个时钟的数据。
我正在尝试从串口输入字符串mydata并将其放入Datetime。但是我得到了解释,不知道为什么。
我的myData上的内容是这样的:00:10:2300:10:2300:10:2300:10:2300:10:2300:10:2300:10:23
你们能否对我这么做?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.Diagnostics;
namespace klokske
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
if (!mySerialPort.IsOpen)
{
mySerialPort.Open();
rtRX.Text = "Port Opened";
}
else
rtRX.Text = "Port busy";
}
DateTime dateTime;
private void AnalogClock_Load(object sender, System.EventArgs e)
{
dateTime = DateTime.Parse(myData);
}
private string myData;
private void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
myData = mySerialPort.ReadExisting();
this.Invoke(new EventHandler(displayText));
}
private void displayText(object o, EventArgs e)
{
rtRX.AppendText(myData);
}
}
}
答案 0 :(得分:0)
正如@Hans Passant所提到的,ReadExisting()
仅返回当前在接收缓冲区中的内容。 DataReceived
事件可以随机触发,因此当此事件触发时,您可能还没有找到所有要查找的字符。您需要构建一个字符串,直到您拥有整个消息,然后才能显示文本。
char ESC = (char)27;
char CR = (char)13;
char LF = (char)10;
StringBuilder sb = new StringBuilder();
//in my case, the data im expected is ended with a Line Feed (LF)
//so I'll key on LF before I send my message
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string Data = serialPort1.ReadExisting();
foreach (char c in Data)
{
if (c == LF)
{
sb.Append(c);
this.Invoke(new EventHandler(sb.toString()));
}
else
{
//else, we append the char to our string that we are building
sb.Append(c);
}
}
}