none
backgroundWorker+progressbar RRS feed

  • 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

    quarta-feira, 2 de maio de 2012 16:00

Respostas

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
    quinta-feira, 3 de maio de 2012 16:41
  • Boa tarde,

    elio.godinho@hotmail.com

    Obrigado,

    sexta-feira, 4 de maio de 2012 11:58
  • 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
                }
            }
    }


    Se ajudou não esqueça de marcar ;)


    sexta-feira, 4 de maio de 2012 12:20
  • 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
    terça-feira, 22 de maio de 2012 16:34