/// <summary> /// Inicia uma nova instancia e define o método de processamento /// </summary> /// <param name="processar">método que será chamado para processar o item</param> public BufferItem(ProcessarHandler processar) { Buffer = new Queue <ThreadItem>(); if (timer == null) { //------------------------------------------------------------------------- // Inicia o timer com 500 milissegundos. Desta forma a execução será rápida // Como faz um "Stop" logo ao iniciar o método "Elapsed", não tem problema // de chamar com este tempo. //------------------------------------------------------------------------- timer = new System.Timers.Timer(500); timer.Elapsed += (s, e) => { lock (Buffer) { timer.Stop(); try { //------------------------------------------------------------------------- // Recupera o threaditem e executa o mesmo //------------------------------------------------------------------------- while (Buffer.Count > 0) { ThreadItem item = Buffer.Dequeue(); if (item == null) { continue; } Auxiliar.WriteLog("O arquivo " + item.FileInfo.FullName + " iniciou o processamento pelo Buffer (Data criação: " + item.FileInfo.LastWriteTime + ")", false); processar.Invoke(item); Thread.Sleep(0); Auxiliar.WriteLog("O arquivo " + item.FileInfo.FullName + " finalizou o processamento pelo Buffer (Data criação: " + item.FileInfo.LastWriteTime + ")", false); if (Disposed) { return; //cai fora ... foi descarregada } } } catch (Exception ex) { Auxiliar.WriteLog("ExceptionBuffer: " + ex.ToString(), false); } finally { //------------------------------------------------------------------------- // Sair ... mas continuar executando de tempos em tempos //------------------------------------------------------------------------- timer.Start(); } } }; } timer.Start(); }
/// <summary> /// Inicia uma nova instancia e define o método de processamento /// </summary> /// <param name="processar">método que será chamado para processar o item</param> public BufferItem(ProcessarHandler processar) { Buffer = new Queue<ThreadItem>(); if (timer == null) { //------------------------------------------------------------------------- // Inicia o timer com 500 milissegundos. Desta forma a execução será rápida // Como faz um "Stop" logo ao iniciar o método "Elapsed", não tem problema // de chamar com este tempo. //------------------------------------------------------------------------- timer = new System.Timers.Timer(500); timer.Elapsed += (s, e) => { lock (Buffer) { timer.Stop(); try { //------------------------------------------------------------------------- // Recupera o threaditem e executa o mesmo //------------------------------------------------------------------------- while (Buffer.Count > 0) { ThreadItem item = Buffer.Dequeue(); if (item == null) continue; Auxiliar.WriteLog("O arquivo " + item.FileInfo.FullName + " iniciou o processamento pelo Buffer (Data criação: " + item.FileInfo.LastWriteTime + ")", false); processar.Invoke(item); Thread.Sleep(0); Auxiliar.WriteLog("O arquivo " + item.FileInfo.FullName + " finalizou o processamento pelo Buffer (Data criação: " + item.FileInfo.LastWriteTime + ")", false); if (Disposed) return;//cai fora ... foi descarregada } } catch (Exception ex) { Auxiliar.WriteLog("ExceptionBuffer: " + ex.ToString(), false); } finally { //------------------------------------------------------------------------- // Sair ... mas continuar executando de tempos em tempos //------------------------------------------------------------------------- timer.Start(); } } }; } timer.Start(); }