protected void SendCompleted() { if (SendArgs.BytesTransferred > 0) { byte[] buffer = null; lock (SendLine) { //获取队列数据 if (SendLine.Count <= 0) { //没有数据重置外部调用 SendAvailable = true; } else { buffer = SendLine.Dequeue(); } } //有效 if (IsAvailable) { if (buffer != null) { //继续发送 Send(buffer); } } } else { Dispose("SendArgs 小于0"); } }
/// <summary> /// 循环发送 /// </summary> protected override void Send(byte[] data) { try { lock (SendLine) { if (SendLine.Count > 0) { data = SendLine.Dequeue(); } else { SendFlag = true; Monitor.Wait(SendLine); } } if (data != null) { UdpClient.BeginSend(data, data.Length, Remote, (ar) => { if (UdpClient.EndSend(ar) == data.Length) { ar.AsyncWaitHandle.Dispose(); Send(null); } }, null); } else { Send(null); } } catch (Exception e) { Console.WriteLine(e.Message); Dispose("Send " + e.Message); } }