コード例 #1
0
ファイル: ThreadControl.cs プロジェクト: Klegy/uninfe
        /// <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();
        }
コード例 #2
0
ファイル: ThreadControl.cs プロジェクト: akretion/uninfe
        /// <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();

        }