public void Run() { try { logger.Info("Iniciando thread de repasse de mensagens ao subscriber"); prepareNesper(); int qtdeFila = 0; long lastHeartbeat = 0; while (_bKeepRunning) { queueSem.WaitOne(250); lock (queue) { qtdeFila = queue.Count; } for (int i = 0; i < qtdeFila; i++) { object evento; string msgid = ""; lock (queue) { evento = queue.Dequeue(); } if (evento.GetType() == typeof(EventoMega)) { EventoMega mega = (EventoMega)evento; msgid = mega.MsgID; repassaEventoMega(mega); } if (evento.GetType() == typeof(EventoCBLC)) { EventoCBLC cblc = (EventoCBLC)evento; msgid = cblc.MsgID; repassaEventoCBLC(cblc); } logger.Debug("Encaminhou mensagem [" + msgid + "]"); } TimeSpan tspan = new TimeSpan(DateTime.Now.Ticks - lastHeartbeat); if (tspan.TotalSeconds > 30) { lastHeartbeat = DateTime.Now.Ticks; subscriberChannel.OnHeartBeat(); } } } catch (Exception ex) { logger.Error("Run() Error: " + ex.Message); if (Ativador.IsValidChannel(subscriberChannel)) { Ativador.AbortChannel(subscriberChannel); } } ServicoConectorSTM.epService.EPAdministrator.GetStatement(eplName1).RemoveListener(this); ServicoConectorSTM.epService.EPAdministrator.GetStatement(eplName2).RemoveListener(this); logger.Info("Thread finalizada [" + guid.ToString() + "]"); }