//接收服务器响应线程函数 private void receiveResponseThreadFunction() { try { while (true) { //接收请求包 AbstractXiepPackage recvPackage = XiepIoHelper.ReceivePackage(_networkStream); if (recvPackage == null) { throw new IOException("获取数据包失败。"); } //如果是响应数据包 if (recvPackage is ResponsePackage) { ResponsePackage responsePackage = (ResponsePackage)recvPackage; String requestId = responsePackage.RequestId; lock (_mapRequestResponse) { if (_mapRequestResponse.ContainsKey(requestId)) { _mapRequestResponse.Remove(requestId); _mapRequestResponse.Add(requestId, responsePackage); } } } //如果是事件数据包 else if (recvPackage is EventPackage) { EventPackage eventPackage = (EventPackage)recvPackage; //触发收到服务器事件的事件 if (ServerEventCame != null) { ServerEventCame.BeginInvoke(this, new XiepClientEventArgs(eventPackage), new AsyncCallback(delegate(IAsyncResult iar) { }), null); } } } } catch { _networkStream = null; _socket = null; //触发与服务器连接断开事件 if (ServerDisconnected != null) { //ServerDisconnected.BeginInvoke(this, new System.EventArgs(), new AsyncCallback(delegate(IAsyncResult iar) { }), this); ServerDisconnected.Invoke(this, new System.EventArgs()); } } }