Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在特定时间后,在计时器滴答声中执行精确功能_C#_Timer - Fatal编程技术网

C# 在特定时间后,在计时器滴答声中执行精确功能

C# 在特定时间后,在计时器滴答声中执行精确功能,c#,timer,C#,Timer,我正在做一个项目,在这个项目中我正在使用我的串行端口。 当我打开串行端口之后,我将不得不发送4个请求。因此,对于发送请求,我的代码是: private string ByteArrayToHexString(byte[] data) { StringBuilder sb = new StringBuilder(data.Length * 3); foreach (byte b in data) sb.

我正在做一个项目,在这个项目中我正在使用我的串行端口。 当我打开串行端口之后,我将不得不发送4个请求。因此,对于发送请求,我的代码是:

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,谢谢你的帮助,因为我是串口编程新手,你能告诉我一个简短的例子吗。