Usuário com melhor resposta
backgroundWorker+progressbar

Pergunta
-
Boa tarde,
A minha questão é a seguinte:
Tenho um form que no load tem que preencher um treeview.
No entanto demora muito tempo a abrir.
Depois de pesquisar tentei experimentar o backgroundWorker+progressbar.
Assim o form abre em primeiro lugar, no entanto o progress bar aparece na mesma altura que a treeview já foi carregada.
Se alguém tiver uma dica!
Obrigado,
Élio
Respostas
-
Resolveu o problema? Se sim, marque as respostas que ajudaram ou poste a solução pra gente ;)
- Marcado como Resposta Elio Godinho quarta-feira, 23 de maio de 2012 14:58
Todas as Respostas
-
Cara, eu desenvolvi um componente muito legal que faz o seguinte: Ele recebe uma Thread como parâmetro e fica carregando o progressar enquanto a thread estiver processando. Enquanto a Thread não termina, o componente bloqueia a aplicação.
O código da chamada do método da DLL é assim:
var processo = new Thread(CarregarParametros);//INSTANCIO A THREAD QUE PREENCHE OS DADOS DA TELA ProgressThread.ProcessarThread("Carregando informações...", ref processo); //MANDO PARA MEU COMPONENTE...
Agora pra te explicar como fiz é outra história pois é muito código pra eu postar aqui... Me passa seu email que te mando a DLL
Se ajudou não esqueça de marcar ;)
- Editado Renato Coqueiro quinta-feira, 3 de maio de 2012 16:42
- Sugerido como Resposta ptcmariano sexta-feira, 4 de maio de 2012 00:27
-
-
MANDEI NO SEU EMAIL A DLL!
Sabe usar Thread?
Para usar a Thread você precisa criar um método que seja void e que não receba parametros.
Outra coisa: No load do seu form coloque o Código " CheckForIllegalCrossThreadCalls = false;" para não dar conflito entre a thread que vc criou e as threads internas que movimentam sua tela.
Não inicie a Thread pois internamente componente faz isso.
Para usar você tem que referenciar a DLL no seu projeto e não esquecer de colocar o "using ProgressThread;"
Exemplo de código:
using ProgressThread; using System.Threading; public partial class seuForm: Form { private void seuForm_Load(object sender, EventArgs e) { CheckForIllegalCrossThreadCalls = false; Thread processarDocLib = new Thread(carregaCamposTela); ProgressThread.ProcessarThread("Carregando dados...", ref processarDocLib); //COLOQUE O TEXTO QUE QUER QUE APAREÇA. PASSE A THREAD POR REFERENCIA //O COMPONENTE SABE SE A THREAD DEU ERRO POIS NO CATCH DO MÉTODO VOCE COLOCA O COMANDO "ProgressThread.FinalizaProgressThread(true);" DAI statusExecucao INTERNAMENTE RECEBE false; if (ProgressThread.statusExecucao == false) return; } private void carregaCamposTela() //O MÉTODO TEM QUE SER VOID E NÃO PODE RECEBER PARAMETRO. { try { txtDesenvolvedor.Text = "Renato"; txtIdade.Text = "24"; txtProfissAo = "Analista de Sistemas"; } catch (Exception ex) { ProgressThread.FinalizaProgressThread(true);//PASSA TRUE PARA DEPOIS SABER SE DEU ERRO } } }
- Editado Renato Coqueiro sexta-feira, 4 de maio de 2012 12:27
-
Resolveu o problema? Se sim, marque as respostas que ajudaram ou poste a solução pra gente ;)
- Marcado como Resposta Elio Godinho quarta-feira, 23 de maio de 2012 14:58