查看下引起的具体异常是什么,Exception的类型,然后对照着看看是哪里出问题

解决方案 »

  1.   

    那个“连接到系统上的设备未发挥作用”异常解决了,之前笔记本用的是232转USB的,换成485转USB的即可,那个端口关闭的卡死,我在公司这边的模拟环境下与PLC通信没出新过,但到了客户那边就出现,高手在哪里?不吝赐教啊
      

  2.   

     while (Sp_IsReceiving) Application.DoEvents();死循环不卡死才怪。
      

  3.   

    不是死循环啊,我操作完PLC和传感器后都把Sp_IsReceiving置成false了,我看了运行不是这边,就是Sp.Close();这句运行到就卡死啊!
      

  4.   

      if (Sp1.IsOpen)
                    {
                        Sp1_IsTryToClosePort = true;
                        while (Sp1_IsReceiving) Application.DoEvents();
                        Sp1.Close();
                    }
                    else
                    {
                        return;
                    }
                    if (Sp.IsOpen)
                    {
                        Sp_IsTryToClosePort = true;
                        while (Sp_IsReceiving) Application.DoEvents();
                        Sp.Close();                }
                    else
                    {
                        return;
                    }                this.Hide();
                    frmPrint frmDY = new frmPrint();
                    frmDY.Show();
    就这段代码啊,上面不是贴出来了,红色部分是传感器的串口在定时器中关闭会卡死。在公司这边测试一切正常,郁闷
      

  5.   

    定时器应该不能去关闭串口,因为定时器相当于一个特殊的线程,它不能去关闭主程序里面打开的设配。如果需要关闭串口的话,在form_load中区关闭应该不会出现这个问题的。
      

  6.   


      if (Sp1.IsOpen)
                    {
                        Sp1_IsTryToClosePort = true;
                        while (Sp1_IsReceiving) Application.DoEvents();
                        Sp1.Close();
                    }
                    else
                    {
                        return;
                    }
                    if (Sp.IsOpen)
                    {
                        Sp_IsTryToClosePort = true;
                        while (Sp_IsReceiving) Application.DoEvents();
                        Sp.Close();                }
                    else
                    {
                        return;
                    }                this.Hide();
                    frmPrint frmDY = new frmPrint();
                    frmDY.Show();
    就这段代码啊,上面不是贴出来了,红色部分是传感器的串口在定时器中关闭会卡死。在公司这边测试一切正常,郁闷卡死的时候正好执行到Sp.Close(),虽然是这里出错,但也可能是跟别的地方发生冲突,比如发生死锁什么的。Sp_IsReceiving这个标识符是在接收部分进行更改的吗,等到对接收到的数据全部处理完后再将这个标志置false么?另外,定时器用 的是什么定时器,Form名称空间下的还是System.Timer名称空间下的
      

  7.   


      if (Sp1.IsOpen)
                    {
                        Sp1_IsTryToClosePort = true;
                        while (Sp1_IsReceiving) Application.DoEvents();
                        Sp1.Close();
                    }
                    else
                    {
                        return;
                    }
                    if (Sp.IsOpen)
                    {
                        Sp_IsTryToClosePort = true;
                        while (Sp_IsReceiving) Application.DoEvents();
                        Sp.Close();                }
                    else
                    {
                        return;
                    }                this.Hide();
                    frmPrint frmDY = new frmPrint();
                    frmDY.Show();
    就这段代码啊,上面不是贴出来了,红色部分是传感器的串口在定时器中关闭会卡死。在公司这边测试一切正常,郁闷卡死的时候正好执行到Sp.Close(),虽然是这里出错,但也可能是跟别的地方发生冲突,比如发生死锁什么的。Sp_IsReceiving这个标识符是在接收部分进行更改的吗,等到对接收到的数据全部处理完后再将这个标志置false么?另外,定时器用 的是什么定时器,Form名称空间下的还是System.Timer名称空间下的Sp_IsReceiving在接受解析完成后置false了,直接用的Timer控件