此异常是向串口写命令时捕获出来的。即serialPort.Write(buffer,0,buffer.Length).
我要实现的功能是向串口循环发送命令,再循环发送的同时,有时需要点击butten手动发送该命令,就在这时点着点着就弹出这个异常。我在我电脑上实验不会出现这种情况。不知道我表述清楚没?请知道的朋友指教。谢谢各位!

解决方案 »

  1.   

    "SocketException: 由于线程退出或应用程序请求,已放弃I/O操作" 解决方案view plaincopy to clipboardprint?
    1、private static ManualResetEvent atmReceiveDone = new ManualResetEvent(false);    
       
    2、posThread = new Thread(delegate() { Pos(); }); posThread.Start();    
       
    3、public void Pos()    
       
    {    
       
      ……//填写必要代码    
       
         PosSocket.BeginReceive(PosMsgBuffer, 0, 2, 0, new AsyncCallback(PosReceiveCallBack), null);    
    //由于此函数是被线程调用,而线程在执行了BeginReveive后,EndReceive之前,线程资源就可能已释放或者退出,所以要在此处等待,直到接受完数据之后,收到返回的指示时,再返回    
         posReceiveDone.WaitOne();    
       
    }    
       
    4、private void PosReceiveCallBack(IAsyncResult AR)    
       
        { int REnd = PosSocket.EndReceive(AR);    
       
          NuberData = new byte[2];    
       
          NuberData[0] = PosMsgBuffer[0];    
       
          NuberData[1] = PosMsgBuffer[1];    
       
          int s = (NuberData[0] << 8) + NuberData[1];    
       
          Byte[] getbuffer = new Byte[s - 2];    
       
          int i;    
       
          for (i = 0; i < getbuffer.Length; i++)    
       
          {    
       
            PosSocket.Receive(getbuffer, i, 1, SocketFlags.None);    
       
          }    
          //线程同步,指示可以返回了    
          posReceiveDone.Set();    
       
         ……//填写必要代码    
       
    }  
     
      

  2.   


    不是很懂,你说的是Socket吧!跟串口一样吗?