采用SerialPort类 如何判断超时。
比如发送取数据命令后,如果没有返回就认为超时??
怎么判断
比如发送取数据命令后,如果没有返回就认为超时??
怎么判断
解决方案 »
- ARM板 WINCE 串口通信问题
- C/S请教一个安全连接数据库的方法。
- WPF窗口中放入Forms的控件的问题
- Performance Tools
- 如何在运行异步操作的时候,禁止用户在界面上的任何位置点击鼠标
- 求票据打印解决方案
- 怎么样把日期(2005-01-23)按照月、日、年单独提出来。
- 如何从一个已经填充数据的DataGrid读取其中的任意一行任意一列的数据?
- 请问Randomize 的应用,希望有一个例子可以说明。
- 未能找到类型或命名空间名称“IBM”(是否缺少 using 指令或程序集引用?)
- 制作安装包的问题
- Microsoft.Office.Interop.Excel找不到的问题
自己try啊
擦,瞎说readtimeout是说硬件驱动方面,读操作超时。跟这个压根不是一回事
想知道你发的命令是否有应答。发完后,死等个一段时间,读串口看看。
2 事件驱动 配合timer
看实际情况。可以
int tick = Environment.TickCount;
List<byte> buf=new List<byte>();
while(Environment.TickCount-tick<超时毫秒)
{
int n = comm.BytesToRead;
byte[] temp = new byte[n];
comm.Read(temp,0,n);
buf.Add(temp);
//查找buf中是否有你要的内容
if(有)
{
//ok
break;
}
else Thread.Sleep(100);//随便休息个时间
}
//超时
我在VC编译环境下,发送完数据后,直接用事件CEvent 结合WaitForSingleObject(hEvent,3000)
就可以判断,是否超时了。
和语言无关的。你vc中如果用mscomm32.ocx,那和.net一样,估计你vc是自己写监听线程的。
如果自己写监听线程,你可以考虑在c#中,增加一个定时器,到时间执行某个方法,如果这之间已经收到了应答,就取消定时器。
System.Threading.Thread.Sleep(1000);//等待命令执行情况
TimeOut++;
Console.WriteLine(TimeOut);
if (TimeOut > 5)
{
System.Windows.Forms.MessageBox.Show("SendCmd数据超时");
//CurrentCmdStatus = true;
return false;
}