询问者
c#串口通信隔段时间就出现堆栈溢出怎么办?

问题
-
我用c#写了个串口通信程序跟下位机通信,因为一个485总线下面挂了几块仪表所以我采用是轮询的方式,也就是没隔一秒钟向串口发一次指令。这样是能够得到每个仪器的数据,但是问题是运行10-20分钟就会出现串口堆栈溢出的错误。我想可能是串口缓冲区没有清掉所以出现这样的错误,但是我用Dispose();还是会报错。我的仪器指令如下:RRSTSB0002ZU,RRSTSB0998ZU,……如果我只有一块表,我不采用for循环来给串口发指令,好像倒不会出现堆栈溢出。但是以用for软件使用不超过20分钟就报错,很是不解。或者还有别的串口发送好的方式呢?
我现在把代码贴出来大家帮我看看:
private void SendCommand()
{
int i;
for (i = 0; i < Comstr.Length; i++)
{
serialPort.WriteLine(Comstr[i]);
serialPort.DiscardOutBuffer();
conf.Delay(1000);
serialPort.Dispose();
}
}private void timersend_Tick(object sender, EventArgs e)
{
if (serialPort.IsOpen)
{
SendCommand();
}
}
can you help me?
全部回复
-
不能插入图片的。
private void BuildComandStr()
{
int i;
for (i = 0; i < Equiment.Length; i++)
{
Comstr[i] = "RRSTSB" + Equiment[i].PadLeft(4, '0') + "ZU";//给仪器发送的指令数组
}
}
private void SendCommand()
{
int i;
for (i = 0; i < Comstr.Length; i++)
{
serialPort.WriteLine(Comstr[i]);
conf.Delay(1000); //延时
}
}//timer控件定时发送指令
private void timersend_Tick(object sender, EventArgs e)
{
if (serialPort.IsOpen)
{
SendCommand();
}
}原代码就是这样,然后运行一段时间之后就报在 serialPort.WriteLine(Comstr[i]);这个位置报错,报错内容为:
baseStream 当前线程处于堆栈溢出状态,因此无法计算表达式的值
BaudRate ……
这段代码是不是有很大的问题?
can you help me?