public IAnnouncingChannel Announce(Channel channel)
        {
            AnnouncingChannel announcing = null;

            lock (announcingChannels) {
                announcing = announcingChannels.FirstOrDefault(a => a.Channel == channel);
                if (announcing != null)
                {
                    return(announcing);
                }
            }
            Logger.Debug("Start announce channel {0} to {1}", channel.ChannelID.ToString("N"), Uri);
            channel.ChannelInfoChanged  += OnChannelPropertyChanged;
            channel.ChannelTrackChanged += OnChannelPropertyChanged;
            channel.Closed += OnChannelClosed;
            announcing      = new AnnouncingChannel {
                Channel = channel, Owner = this, IsStopped = false
            };
            lock (announcingChannels) {
                announcingChannels.Add(announcing);
            }
            if (announceThread == null || !announceThread.IsAlive)
            {
                isStopped = false;
                restartEvent.Reset();
                announceThread      = new Thread(AnnounceThreadProc);
                announceThread.Name = String.Format("PCPYP {0} Announce", Uri);
                announceThread.Start();
            }
            return(announcing);
        }
 public IAnnouncingChannel Announce(Channel channel)
 {
     AnnouncingChannel announcing = null;
       lock (announcingChannels) {
     announcing = announcingChannels.FirstOrDefault(a => a.Channel==channel);
     if (announcing!=null) return announcing;
       }
       Logger.Debug("Start announce channel {0} to {1}", channel.ChannelID.ToString("N"), Uri);
       channel.ChannelInfoChanged  += OnChannelPropertyChanged;
       channel.ChannelTrackChanged += OnChannelPropertyChanged;
       channel.Closed              += OnChannelClosed;
       announcing = new AnnouncingChannel { Channel=channel, Owner=this, IsStopped=false };
       lock (announcingChannels) {
     announcingChannels.Add(announcing);
     if (announceThread==null || !announceThread.IsAlive) {
       isStopped = false;
       restartEvent.Reset();
       announceThread = new Thread(AnnounceThreadProc);
       announceThread.Name = String.Format("PCPYP {0} Announce", Uri);
       announceThread.Start();
     }
       }
       return announcing;
 }