"SocketException: 由于线程退出或应用程序请求,已放弃I/O操作" 解决方案 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(); ……//填写必要代码 }