public void Close() { //如果当前通道是空闲的,则无需关闭。 //注意:该判断可避免关闭方法被多线程重入。 if(this.IsIdled) return; var args = new ChannelEventArgs(this); //激发“Closing”关闭前事件 this.OnClosing(args); //如果关闭前事件处理函数取消后续的关闭操作则退出 //if(args.Cancel) // return; //执行子类实现的真正关闭动作 this.OnClose(); //激发“Closed”关闭后事件 this.OnClosed(new ChannelEventArgs(this)); }
protected virtual void OnClosing(ChannelEventArgs args) { var handler = this.Closing; if(handler != null) handler(this, args); }