none
c#串口通信隔段时间就出现堆栈溢出怎么办? RRS feed

  • 问题

  • 我用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?
    2010年4月20日 2:44

全部回复

  • who can help me?
    can you help me?
    2010年4月20日 4:05
  • 还是没有人给我讲解这个问题,郁闷。


    can you help me?
    2010年4月21日 5:50
  • 错误堆栈贴上来看看。
    2010年4月21日 7:51
  • 不能插入图片的。

     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?
    2010年4月22日 0:48
  • 你好!请问可以提供你的堆栈跟踪信息吗?
    周雪峰
    2010年4月24日 2:19
    版主