DOEVENTS NAO FUNCIONA

LUIS.HERRERA 24/05/2013 21:01:57
#424009
Peguei um controle que exibe uma animação de carregamento (circulo girando), tipo páginas nos navegadores, para quando um processo demorar exibir algo ao usuário, mas ele trava também.

Coloquei esse controle no toolStatuStrip do MDI. Quando aciono o menu do MDI para carregar um form, ativo essa animação (OK).

Ao entrar no load do form, faço o carregamento de vários controles do Banco. Porém se houver qualquer problema de comunicação com o SQL / Banco (Método Open do SQLClient) o meu programa trava até receber uma Exception.

O problema é exatamente esse, quero que algo fique sinalizando ao usuário o andamento do processo para não parecer que travou tudo ( o que realmente está ocorrendo agora). Assim quando a Exception é recebida no form Filho, eu aviso o MDI para Parar a animação (OK).

Só não estou conseguindo que a animação funcione enquanto a Exception do SQL não é retornada, ou seja, o processo é externo ao meu aplicativo.

Incluí o Application.DoEvents() na chamada da animação (Form MDI). mas não resolveu, parece que o DoEvents tem que ser chamado a cada interação, mas como meu aplicativo não tem controle deste processo, só fica aguardando, ele fica travado.

Como faço para ele não travar e realizar a animação?
FOXMAN 24/05/2013 21:39:42
#424010
Resposta escolhida
Luis, posso até estar equivocado. Mas essas animações somente funcionam corretamente se estiverem lançadas dentro de um Thread.
Tenho aqui na minha aplicação e funciona perfeitamente.
No meu caso tenho uma imagem loading girando durante a busca de CEP. Assim que tenho o retorno ela para de girar.
De qualquer forma utilizei o DoEvents.

Veja :

BackgroundWorker bw = new BackgroundWorker();
bw.WorkerSupportsCancellation = true;
bw.WorkerReportsProgress = true;
bw.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgworker_RunWorkerCompleted);

bw.RunWorkerAsync();
this.picLoading.Visible = true;
while (bw.IsBusy)
{
this.picLoading.Visible = true;
Application.DoEvents();
}
LUIS.HERRERA 24/05/2013 22:37:19
#424011
Perfeito Foxman, só fiz o ajuste para iniciar o processo do SQLCliente dentro do evento bgWorker_DoWork e funcionou.

Obrigadão.
Tópico encerrado , respostas não são mais permitidas