protected override void Dispose( bool disposing ) { base.Dispose(disposing); // Desliga a thread animar = false; animação = null; }
/// <summary> /// Carrega a animação em segundo plano (chamada pela thread). /// </summary> private void CarregarAnimação() { animação = mercadoria.Animação; if (animação != null && animação.Imagens != null) { this.Imagens.AddRange(animação.Imagens); this.Imagens.RemoveAt(0); } carregado = true; }
/// <summary> /// Obtém no banco de dados as várias imagems para referência informada /// e cria uma animação /// </summary> /// <param name="referênciaNumérica"></param> /// <returns></returns> public static Animação ObterAnimação(Mercadoria.Mercadoria mercadoria) { Console.WriteLine("Animação::ObterAnimação()"); IDataReader leitor = null; ArrayList dados = new ArrayList(); Animação animação; IDbConnection conexão = Conexão; lock (conexão) { Usuários.UsuárioAtual.GerenciadorConexões.RemoverConexão(conexão); using (IDbCommand cmd = conexão.CreateCommand()) { cmd.CommandText = "SELECT foto FROM foto WHERE mercadoria = " + DbTransformar(mercadoria.ReferênciaNumérica); using (leitor = cmd.ExecuteReader()) { try { while (leitor.Read()) { /* Para minimizar o tempo com a conexão presa, * o processamento da imagem só será feito * após recuperar todos os dados do banco de dados, * liberando assim a conexão. * -- Júlio, 18/11/2005 */ dados.Add(leitor.GetValue(0)); } } finally { if (leitor != null) leitor.Close(); Usuários.UsuárioAtual.GerenciadorConexões.AdicionarConexão(conexão); } } } } if (dados.Count == 0) return null; animação = new Animação(); foreach (byte[] objFoto in dados) { Image imagem = (Image)new DbFoto(objFoto); if (imagem != null) animação.Imagens.Add(imagem); } Console.WriteLine("Fim Animação::ObterAnimação()"); return animação; }
/// <summary> /// Inicia uma animação. /// Chame PausarAnimação() para pausar. /// </summary> /// <param name="animação">Animação da mercadoria</param> public void MostrarAnimação(Animação animação) { #if DEBUG if (animação != null) Console.WriteLine("Mostrando animação: {0}", animação.ToString()); #endif this.animação = animação; animar = true; if (animação == null || animação.Carregado && animação.Imagens.Count <= 1) MostrarPróximoQuadro(); else { if (thread == null) CriarThread(); else InterromperThread(); } }
/// <summary> /// Inicia animação de mercadoria. /// </summary> /// <param name="mercadoria">Mercadoria cuja animação será exibida.</param> /// <remarks> /// Verifica se a mercadoria já possui a animação carregada. /// Caso contrário, carrega em segundo plano. /// </remarks> public void MostrarAnimação(Entidades.Mercadoria.Mercadoria mercadoria) { #if DEBUG if (animação != null) Console.WriteLine("Mostrando animação: {0}", animação.ToString()); #endif if (mercadoria.FotoObtida) MostrarAnimação(mercadoria.Animação); else { this.animação = new AnimaçãoOca(mercadoria); animar = true; if (thread == null) CriarThread(); else InterromperThread(); } }