Ir ao conteúdo

Imagen (gif) de Loading em C#


R3N4N

Posts recomendados

Postado

Bom, to com um problemaço, ja faz 3 dias que to pesquisando na internet que nem um louco e não acho a solução. Resolvi então procurar uns fóruns de programação para obter ajuda.

Vamos ao problema:

Bem, eu uso windows Forms, estou tentando fazer uma figura aparecer enquanto o sistema ta processando algo e desaparecer ao terminar de processar, ou seja, "um loading".

Tipo:

private button1_Click {

figura.Visible = true;

for (int i = 0; i<2; i++0) i--; //Loop infinito para teste.

figura.Visible = false;

}

O problema é que minha figura é um gif, e quando eu do um visible nela e o processador começa processar o codigo debaixo ela trava (a animação).

É lógico que ocorre devido a falta de processamento paralelo.

Mas com processamento paralelo o codigo fica muito grande, precisa-se criar funções sem retorno e sem parâmetro para poder fazer uma tread rodar ela, ou usar o componente BackGroundWorked.

Por isso eu queria saber se tem como usar uma tread, ou o BackGroundWorked para fazer o Gif ficar animado. Eu tentei, mas treads não deixar fazer qualquer componente visual receber TRUE em seu visible.

Resumindo, alguem poderia me ajudar a fazer um gif aparecer e não deixar ele travar enquanto o processo não acaba?

Se alguem souber fazer um loading com progressBar tb serve, mas tem que ser um progressBar que não com tempo inderteminado (onde eu não sei quanto tempo vai levar para processar o meu codigo).

Postado

Ja tentei fazer com time, mas não entendi bem como ele funciona. Eu fiz assim:

private void btnOK_Click (object sender, EventArgs e) {

timer1.Enabled = true;

for (int i = 0; i<2; i++0) i--; //Loop infinito para testar se o gif para de animar enquanto se processa algo.

timer1.Enabled = false;

}

private void timer1_Tick (object sender, EventArgs e) {

pictureBox1.Visible = true;

pictureBox1.Refresh();

Application.DoEvents();

}

Se for assim que se deve usar eu ja tentei e não deu certo (coloquei intervalo de 100ms).

Se não for assim tenta explicar pra mim como esse timer funcionar fazendo o favor.

  • Membro VIP
Postado


private void btnOK_Click (object sender, EventArgs e) {
timer1.Enabled = true;
pictureBox1.Visible = true;
}


private void timer1_Tick (object sender, EventArgs e) {
timer1.Enabled = false;
pictureBox1.Visible = false;
}

Coloque o intervalo de acordo com a duração da animação, loops infinitos vão interremper o processamento e sua aplicação não vai funcionar.

Postado

Não deu certo, fiz exatamente como você disse, desse jeito a figura nem aparece, tirei o loop infinito pra num travar o programa, substitui pelo meu codigo normal que faz um acesso ao bancodedados e tras um grid, leva cerca de 3 segundos e durante esse tempo nada do gif aparecer.

  • Membro VIP
Postado

Ah... Como é um gif animado para a animação voltar ao início use:


pictureBox1.Image.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Time, 0);

E sobre a figura não aparecer, o estado inicial é:


timer1.Enable = false;
pictureBox1.Visible = false;
timer1.Interval = 10000;//Aqui deve ser a duração da animação, mas em ms, 10000ms = 10 segundos.

Postado

Timer é um componente de processamento paralelo?

porque ele num processa a figura, na verdade ela nem aparece.

Mas valeu aí, se souber de mais algo por favor me diga, vai fazer 2 semanas que to pesquisando isso e num acho nada.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!