none
Mensagem "Aguarde..."

    Pergunta

  • Cenario: Carga de um datagridview de um arquivo de pedidos com 25000 pedidos.

    Problema: Enquanto carrega o grid, a tela fica em branco por alguns segundos o que pode levar o usuario por instantes a pensar que algo está errado.

    Tentativa de solução: quando acionado o botão que irá mostrar o grid imaginei colocar um label com a mensagem "Aguarde..." enquanto o grid estava sendo carregado e, após a carga tornar o labekl invisivel novamente como abaixo:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

          lblAguarde.Text = "Aguarde!!!"

          CarregaGrdPedidos(0)

    End Sub

    Resultado: O programa só mostra a label APÓS a carga do grid...

     

    Existe alguma solução para isso (outra maneira talvez?)

     

    agrazdeço desde já.

    Luiz Melo

     

    quarta-feira, 6 de junho de 2007 19:52

Respostas

  • Invoque o método Refresh() do label antes de começar a carregar o grid:

     

    lblAguarde.Text = "Aguarde!!!"
      lblAguarde.Refresh()

     

    Talvez fosse melhor executar o carregamento do grid numa thread secundaria, entretanto.

    quarta-feira, 6 de junho de 2007 20:04

Todas as Respostas

  • Você pode usar uma função de delay antes do CarregaGrdPedidos(0) que seria

     

    Sleep(100)

     

    ou talvez o DoEvents() funcione.

    quarta-feira, 6 de junho de 2007 19:57
  • Invoque o método Refresh() do label antes de começar a carregar o grid:

     

    lblAguarde.Text = "Aguarde!!!"
      lblAguarde.Refresh()

     

    Talvez fosse melhor executar o carregamento do grid numa thread secundaria, entretanto.

    quarta-feira, 6 de junho de 2007 20:04
  • Jonatã: obrigado pela tentativa mas, Sleep(100) não é um comando... tenho que declarar? Sou iniciante no VB... e esse DoEvents, como usá=lo?

    grato.

    luiz Melo

    quarta-feira, 6 de junho de 2007 20:07
  • Olá Angus...

    Obrigado.. Funcionaou beleza!

    Incomodo se perguntar sobre essa outra alternativa? Como fazer? tem algum exemplo para eu estudar?

    Grato

    Luiz Melo

     

    quarta-feira, 6 de junho de 2007 20:10
  • A vantagem de se executar operações longas em threads secundárias é que você pode executar outras tarefas ao mesmo tempo e a interface gráfica também continua responsiva permitindo, por exemplo, que você concele a operação etc.

     

    Há um exemplo no site do Macoratti de carregamento de um DataGridView, com fonte para download:

     

    http://www.macoratti.net/vbn5_ept.htm

     

    Apenas mude a string de conexão e o comando select para usar alguma tabela que você tenha aí. Faça essa mesma consulta que traz os 25000 registros para ver se melhora.

     

    O exemplo acima usa o controle BackgroundWorker, mas há outras alternativas também, como utilizar as funcionalidades do ADO.NET. Exemplo aqui:

    http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=1333903&SiteID=21

     

     

     

    quarta-feira, 6 de junho de 2007 20:40
  • Bastante esclarecedor, caro Angus...

    Vou estudar os dois processos e ver se consigo pô-los em prática.

    Por enquento, muito obrigado!

    Luiz Melo

     

    quarta-feira, 6 de junho de 2007 21:52