目前,我只是使用Thread.Sleep(500)在WRITE之间延迟,但有没有办法检测何时发送的最佳时间是?还是用缓冲区?
示例代码
接口
private voID btn_infuse_Click(object sender,RoutedEventArgs e) { cmd.SetTargetInfusionVolume(spmanager,double.Parse(tBox_targetvolume.Text)); cmd.StartInfuse(spmanager);//cmd object of Command class}
命令类
public voID StartInfuse(SPManager spm){ spm.Write("RUN");//spm object of serialportmanager class } public voID SetTargetInfusionVolume(SerialPortManager spm,double num) { spm.Write("MLT " + num.ToString()); }
SerialPortManager类
public voID Write(string sData) { if (oSerialPort.IsOpen) {//oSerialPort object of SerialPort class try { oSerialPort.Write(sData + "\r"); } catch { MessageBox.Show("error"); } } }解决方法 如果您的串口设置(特别是Hans Passsant提到的,流量控制)是正确的,那么速度问题很可能是您的设备无法足够快地处理消息,以便在发送速度过快时与您保持联系,或者它期望消息之间存在“无声”差距以便描述它们.
在这种情况下,Sleep()引入传输延迟是一种非常合理的方法.您需要找到明智的延迟,以确保设备成功处理您的消息,理想情况下不会拖延您的应用程序太长时间.
这通常涉及试验和错误,但请查阅设备的文档,因为相当多的设备在传输中使用间隙来指示消息包的结束(例如,通常他们可能希望您在一段时间后保持沉默.消息,例如,如果他们在2400bps链路上指定了10比特的“静默时间”,则这将对应于10/400ths或仅超过4毫秒).但是,这可能会受到windows的影响,因为它往往会缓冲数据(即它会挂起几毫秒,看看你是否会要求它传输更多) – 你可能因此需要一个延迟显着超过应该严格要求的延迟 – 可能15-20ms.当然,我可能会咆哮错误的树,你可能会发现你需要500毫秒左右才能让它工作.
总结以上是内存溢出为你收集整理的c# – 如何等待正确的时刻写?全部内容,希望文章能够帮你解决c# – 如何等待正确的时刻写?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)