C# 在特定时间后,在计时器滴答声中执行精确功能
我正在做一个项目,在这个项目中我正在使用我的串行端口。 当我打开串行端口之后,我将不得不发送4个请求。因此,对于发送请求,我的代码是:C# 在特定时间后,在计时器滴答声中执行精确功能,c#,timer,C#,Timer,我正在做一个项目,在这个项目中我正在使用我的串行端口。 当我打开串行端口之后,我将不得不发送4个请求。因此,对于发送请求,我的代码是: private string ByteArrayToHexString(byte[] data) { StringBuilder sb = new StringBuilder(data.Length * 3); foreach (byte b in data) sb.
private string ByteArrayToHexString(byte[] data)
{
StringBuilder sb = new StringBuilder(data.Length * 3);
foreach (byte b in data)
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
return sb.ToString().ToUpper();
}
private void senddata1(String str)
{
// Convert the user's string of hex digits (ex: B4 CA E2) to a byte array
byte[] data = HexStringToByteArray(str);
// Send the binary data out the port
comport.Write(data, 0, data.Length);
}
此函数将创建发送数据的方法。
在计时器滴答声事件中,我发送以下数据:
private void timer1_Tick(object sender, EventArgs e)
{
//here I'm sending my data in a timer
senddata1(s1);
senddata1(s2);
senddata1(s3);
senddata1(s4);
}
注意:在每个senddata1()函数之后,系统都会得到响应。
所以问题是,当我发送数据时,我没有得到响应,因为系统无法读取所有senddata。
我想以某种方式管理我的程序,这样我就可以每250秒发送一次数据。
像这样:
SendData1(s1);
get response from the system
senddata1(s2);
get response from the system
get响应的处理方式如下:
comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
那么,我有没有办法管理我的程序呢。
请分享您的意见。如果您的意思是要在系统响应上调用senddata1函数,则应使用事件通知您的响应。 然后调用senddata1,并在每个响应中为该函数指定指定的输入(s1,s2,…)
(如果我没有意识到你的问题,请告诉我。在评论中告诉我)我尝试过这个方法,但有一个小问题,我无法跟踪回复。它像一个代表一样被管理。那么有没有办法检查我是否得到了输出呢?很明显,你并不喜欢DataReceived事件,因为你想在收到响应之前阻止你的代码。所以不要使用它,直接调用Read()。在得到完整的响应之前,不要忘记循环。@HansPassant,谢谢你的帮助,因为我是串口编程新手,你能告诉我一个简短的例子吗。