本帖最后由 arofree 于 2011-03-18 17:06:37 编辑

解决方案 »

  1.   


    //试试,不行的话,我也不晓得了……
     ControlDraw.BeginInvoke(DataReceived, new Object[] { sender, e });
      

  2.   

    try catch  然后调试看看哪里出问题了论坛签名======================================================================arofree:你好!
    截至 2011-03-18 17:04:10 前:
    你已发帖 14 个, 未结贴 2 个;
    结贴率为: 85.71%

    当您的问题得到解答后请及时结贴.

    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
    http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
    http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html如何给分和结贴?
    http://community.csdn.net/Help/HelpCenter.htm#结帖如何给自己的回帖中也加上签名?
    http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx
      

  3.   

    SerialDataReceivedEventHandler DataReceived = new SerialDataReceivedEventHandler(serialPort_DataReceived);
            this.Invoke(DataReceived, new Object[] { sender, e });
    使得一旦接收事件触发,这个循环永远跳不出。
      

  4.   

    已经知道serialPort_DataReceived是另一个线程执行的情况下,我觉得没必要每次触发都先判断后生成一个新的SerialDataReceivedEventHandler,然后再次执行去显示了啊。不如把前面if里面的去掉,直接对else里面的方法使用begininvoke算了。
      

  5.   

    死锁了http://blog.csdn.net/wuyazhe/archive/2010/05/19/5606276.aspx
      

  6.   

    把需要进行的操作放到另外一个函数里面,然后在这个事件中通过this.BeginInvoke调用。
    不过关闭时候,因为BeginInvoke是异步调用,所以会出现异常,捕捉端口已经关闭的异常,忽略掉就行。
      

  7.   

    ControlDraw.BeginInvoke(DataReceived, new Object[] { sender, e });