public void CleanDisconnect() { try { Monitor.TryEnter(this.TcpClientList, 1000); var list = new List <TcpClient>(); TcpClient client = null; while (!this.TcpClientList.IsEmpty) { if (!this.TcpClientList.TryDequeue(out client)) { break; } if (client.Client != null && client.Connected) { list.Add(client); } else { CtkNetUtil.DisposeTcpClient(client); } } foreach (var tc in list) { this.m_tcpClientList.Enqueue(tc); } } catch (Exception ex) { CtkLog.Write(ex); } finally { Monitor.Exit(this.TcpClientList); } }
public void CleanUntilLast() { var sourceList = this.m_tcpClientList; try { Monitor.TryEnter(sourceList, 1000); var list = new List <TcpClient>(); TcpClient client = null; while (!sourceList.IsEmpty) { if (!sourceList.TryDequeue(out client)) { break; } if (sourceList.IsEmpty) { list.Add(client); } else { CtkNetUtil.DisposeTcpClient(client); } } foreach (var tc in list) { sourceList.Enqueue(tc); } } catch (Exception ex) { CtkLog.Write(ex); } finally { Monitor.Exit(sourceList); } }
public void Disconnect() { if (this.threadNonStopConnect != null) { this.threadNonStopConnect.Abort(); this.threadNonStopConnect = null; } CtkNetUtil.DisposeTcpClient(this.activeWorkClient); //一旦結束就死了, 需要重new, 所以清掉event沒問題 CtkEventUtil.RemoveEventHandlersFromOwningByFilter(this, (dlgt) => true); }