none
Ajuda com a ProgressBar, quero colocar uma Barra de Progresso na hora que tiver Sincronizando o Banco de Dados. RRS feed

  • Pergunta

  • Tenho um Sistema que faz Sincronismo entre 2 Bancos. Tenho um Banco Local SQL Compact 3.5 SP1 e um Banco WEB SQL Server 2005, que funciona assim. Eu digito no Sistema e as informações vão para o Banco Local, quando eu mando Sincronizar ele vai para o Banco WEB. Ai se eu tiver fora de casa eu mando Sincronizar o programa e todas as informações são atualizadas no Banco. Isso funciona perfeitamente, eu uso esse artigo para fazer o sistema  http://www.linhadecodigo.com.br/Artigo.aspx?id=2241

     Mas agora vai o meu problema, o Sistema demora alguns segundos para Sincronizar os 2 Bancos e o cliente não sabe se o Sistema está Sincronizando ou travado até que ele termine. Ai quero colocar um ProgressBar, pode ser na Propriedade "marquee" só para a barra ficar se mechendo e quando terminar enche a Barra, mas o pior é quando eu clico no Botão para Sincronizar ele trava a Barra e ela tambem fica parada até terminar o Sincronismo.

    terça-feira, 13 de outubro de 2009 12:15

Respostas

  • Consegui Resolver o Problema fiz assim

    private

     

     

    void buttonSincronizar_Click(object sender, EventArgs e)

    {

    StartProgress();

    StopProgress();

    SeuOutroMetodoSincronizar();

    }

     

     

    private void StartProgress()

    {

     

     

    if (this.InvokeRequired)

    BeginInvoke(

     

    new MethodInvoker(delegate() { StartProgress(); }));

     

     

    else

    {

    progressBar1.Style =

     

    ProgressBarStyle.Marquee;

    progressBar1.MarqueeAnimationSpeed = 100;

    progressBar1.Value = 0;

    }

    }

     

     

    // Finaliza o progresso

     

     

    private void StopProgress()

    {

     

     

    if (this.InvokeRequired)

    BeginInvoke(

     

    new MethodInvoker(delegate() { StopProgress(); }));

     

     

    else

    {

    progressBar1.Style =

     

    ProgressBarStyle.Blocks;

    progressBar1.MarqueeAnimationSpeed = 0;

    progressBar1.Value = 100;

    }

    }

     

     

    private void SeuOutroMetodoSincronizar()

    {

     

     

    // Cria SyncAgent

     

     

    BancoLocalSyncAgent syncAgent = new BancoLocalSyncAgent();

     

     

    // Chama método Synchronize de forma assíncrona

     

     

    // usando anonymous delegates

     

     

    Func<Microsoft.Synchronization.Data.SyncStatistics> async = new Func<Microsoft.Synchronization.Data.SyncStatistics>(syncAgent.Synchronize);

    async.BeginInvoke((r) =>

    {

     

     

    // Aqui o método Synchronize terminou...

    Microsoft.Synchronization.Data.

     

    SyncStatistics syncStats = async.EndInvoke(r);

     

     

    // Modifica progress bar

    StopProgress();

    },

     

    null);

     

     

    // Na linha abaixo o método Synchrronize ainda está executando

     

     

    // Modifica o estilo do progress bar para indicar que existe um processamento

    StartProgress();

    }

    • Editado _Rodolfo quinta-feira, 15 de outubro de 2009 22:57
    • Marcado como Resposta _Rodolfo quinta-feira, 15 de outubro de 2009 22:57
    quinta-feira, 15 de outubro de 2009 13:29

Todas as Respostas

  • Já tentou usar Ajax com o controle UpdateProgress? Para mais detalhes posta essa dúvida no fórum de ASP.NET.

    Att,



    Visite a Zona .NET: http://zonadotnet.wordpress.com | http://lblima.blogspot.com
       
  • Não sei se tem alguma coisa a ver, estou usando Windows Forms e o Sincronization Framework. Se tiver alguma coisa a ver, ainda não tentei, posso verificar no fórum de ASP.NET.
    • Sugerido como Resposta Vinicius Eróico terça-feira, 13 de outubro de 2009 19:24
    terça-feira, 13 de outubro de 2009 19:11
  • da uma olhada nesse link ,acho que pode te ajudar http://www.macoratti.net/vbn_pb1.htm

    abraço.


    viniciuseroico
    terça-feira, 13 de outubro de 2009 19:26
  • Estou fazendo esse Exemplo,ele é muito Bom. Mas não consigo usá-lo, pois quando tento fazer o Sincronismo ele trava a Barra e quando termina o Sincronismo ele destrava a Barra.
    quarta-feira, 14 de outubro de 2009 19:14
  • Rodolfo,

    Segue outro exemplo:

    http://www.linhadecodigo.com.br/Artigo.aspx?id=1611

    att,

    Fernanda
    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    quinta-feira, 15 de outubro de 2009 13:08
    Moderador
  • Consegui Resolver o Problema fiz assim

    private

     

     

    void buttonSincronizar_Click(object sender, EventArgs e)

    {

    StartProgress();

    StopProgress();

    SeuOutroMetodoSincronizar();

    }

     

     

    private void StartProgress()

    {

     

     

    if (this.InvokeRequired)

    BeginInvoke(

     

    new MethodInvoker(delegate() { StartProgress(); }));

     

     

    else

    {

    progressBar1.Style =

     

    ProgressBarStyle.Marquee;

    progressBar1.MarqueeAnimationSpeed = 100;

    progressBar1.Value = 0;

    }

    }

     

     

    // Finaliza o progresso

     

     

    private void StopProgress()

    {

     

     

    if (this.InvokeRequired)

    BeginInvoke(

     

    new MethodInvoker(delegate() { StopProgress(); }));

     

     

    else

    {

    progressBar1.Style =

     

    ProgressBarStyle.Blocks;

    progressBar1.MarqueeAnimationSpeed = 0;

    progressBar1.Value = 100;

    }

    }

     

     

    private void SeuOutroMetodoSincronizar()

    {

     

     

    // Cria SyncAgent

     

     

    BancoLocalSyncAgent syncAgent = new BancoLocalSyncAgent();

     

     

    // Chama método Synchronize de forma assíncrona

     

     

    // usando anonymous delegates

     

     

    Func<Microsoft.Synchronization.Data.SyncStatistics> async = new Func<Microsoft.Synchronization.Data.SyncStatistics>(syncAgent.Synchronize);

    async.BeginInvoke((r) =>

    {

     

     

    // Aqui o método Synchronize terminou...

    Microsoft.Synchronization.Data.

     

    SyncStatistics syncStats = async.EndInvoke(r);

     

     

    // Modifica progress bar

    StopProgress();

    },

     

    null);

     

     

    // Na linha abaixo o método Synchrronize ainda está executando

     

     

    // Modifica o estilo do progress bar para indicar que existe um processamento

    StartProgress();

    }

    • Editado _Rodolfo quinta-feira, 15 de outubro de 2009 22:57
    • Marcado como Resposta _Rodolfo quinta-feira, 15 de outubro de 2009 22:57
    quinta-feira, 15 de outubro de 2009 13:29
  • Eu estou com uma situação parecida com a sua e resolvi da seguinte maneira:

    Criei um WebService no Servidor com SQL 2005, e esse web service se resposanbiliza por Fazer a inserção.

    Na aplicação eu faço um loop nos registros da minha tabela, passando linha por linha dos registros locais, sendo assim minha progress bar funcionará, o método executenonquery do webservice me retorna um inteiro para que eu saiba se ocorreu erro na inserção ou não.

    Se vc me perguntar se fica mais lento, eu te respondo: com certeza.

    Optei por segurança ao invés de performance.

    Espero ter ajudado
    Se esta resposta solucionou sua dúvida, “Marque como Resposta” Att, Alan
    quinta-feira, 15 de outubro de 2009 14:23