"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();
- ……//填写必要代码
- }