none
tempo de processamento enquanto processa uma tarefa RRS feed

  • Pergunta

  • existe uma tela no sistema, que quando se clica no botão processar aparece uma mensagem de processando. gostaria de colocar o tempo que levar o processamento. igual no sql server. quando executa alguma query, na barra de status tem o tempo que está em execução.

    terça-feira, 19 de junho de 2012 20:03

Respostas

  • cara resolvido o problema. na verdade tem que ser assim:
    ScriptManager.RegisterClientScriptBlock(Page, Page.GetType, "zz", "para();", True)

    de qualquer forma obrigado pela ajuda.
    • Marcado como Resposta rafa-martin terça-feira, 19 de junho de 2012 22:54
    terça-feira, 19 de junho de 2012 22:54

Todas as Respostas

  • Stopwatch watch = new Stopwatch();
    watch.Start();
    //faz o processamento
    watch.Stop();
    
    var tempo = watch.ElapsedMilliseconds;

    ou

    var inicio = DateTime.Now;
    //faz o processamento
    var fim = DateTime.Now;
    
    var tempo = (fim-inicio).Milliseconds;


    http://www.linkedin.com/pub/murilo-kunze/44/191/455



    • Editado Murilo Kunze terça-feira, 19 de junho de 2012 20:08
    • Sugerido como Resposta Cleber H. Neves terça-feira, 19 de junho de 2012 20:13
    terça-feira, 19 de junho de 2012 20:07
  • murilo na verdade o que eu quero é que enquando estiver processando apareça na tela o tempo de processamento em tempo real. ou seja, enquanto estiver processando fique contando de segundo em segundo até o processamento terminar.

    e não como vc passou. que só mostra o tempo de processamento quando terminar.

    terça-feira, 19 de junho de 2012 20:17
  • Huuuuum, então você terá que fazer com javascript.

    Tenta assim:

    var atualizador = setInterval(funcaoQueAtualizaUmTexto,1000); //vai começar a atualizar o texto

    depois você usa 

    clearInterval(atualizador);//aqui vai parar de contar


    http://www.linkedin.com/pub/murilo-kunze/44/191/455



    • Editado Murilo Kunze terça-feira, 19 de junho de 2012 20:23
    terça-feira, 19 de junho de 2012 20:18
  • mais como seria. com javascript desconheço. e com o objeto timer daria certo? também não sei se é possível com ele.

    como poderia fazer?

    terça-feira, 19 de junho de 2012 20:19
  • O Timer é server-side, para ter interação direta com a interface do usuário precisa ser como o Murilo te sugeriu ou com alguma biblioteca Ajax (jQuery)

    Sendo que você não conhece javascript, veja isto como uma ótima oportunidade de aprender, mãos a massa!

    Se tiver dúvidas de como implementar você pode postar aqui o seu código para com base nele receber a devida orientação.


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    terça-feira, 19 de junho de 2012 20:32
  • eduardo, javascrit eu conheço. só perguntei pq não achei nada a respeito disso com javascritp. eu já tinha procurado.

    terça-feira, 19 de junho de 2012 20:33
  • Se conheçe javascript basta criar uma função que mostra na tela um valor de tempo, setar o invervalo para a função e depois desativar o intervalo.

    Por que tentar outra solução?

    Se tiver dúvidas de como implementar você pode postar aqui o seu código para com base nele receber a devida orientação.

    Caso tenha resolvido, marque a resposta de quem te forneceu a solução.


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    terça-feira, 19 de junho de 2012 20:39
  • senhores consegui fazer o javascript que funciona como se fosse um cronometro. porém, não estou conseguindo implementar isso no asp.net.

    quando clicar no botão que tenho no meu form asp.net tem q disparar a função inicia. e quando  processamento terminar o asp.net tem que chamar a função para.

    como faço essa implementação? abaixo código:

    <html> 
    <head> 
    <title>Cronometro</title> 
    <script> 
    function formatatempo(segs) { 
    min = 0; 
    hr = 0; 
    /* 
    if hr < 10 then hr = "0"&hr 
    if min < 10 then min = "0"&min 
    if segs < 10 then segs = "0"&segs 
    */ 
    while(segs>=60) { 
    if (segs >=60) { 
    segs = segs-60; 
    min = min+1; 
    } 
    } 
     
    while(min>=60) { 
    if (min >=60) { 
    min = min-60; 
    hr = hr+1; 
    } 
    } 
     
    if (hr < 10) {hr = "0"+hr} 
    if (min < 10) {min = "0"+min} 
    if (segs < 10) {segs = "0"+segs} 
    fin = hr+":"+min+":"+segs 
    return fin; 
    } 
    var segundos = 0; //inicio do cronometro 
    function conta() { 
    segundos++; 
    document.getElementById("counter").innerHTML = formatatempo(segundos); 
    } 
     
    function inicia(){ 
    interval = setInterval("conta();",1000); 
    } 
     
    function para(){ 
    clearInterval(interval); 
    } 
     
    function zera(){ 
    clearInterval(interval); 
    segundos = 0; 
    document.getElementById("counter").innerHTML = formatatempo(segundos); 
    } 
    </script> 
    </head> 
    <body> 
    <span id="counter">00:00:00</span><br> 
    <input type="button" value="Parar" onclick="para();"> <input type="button" value="Iniciar" onclick="inicia();"> <input type="button" value="Zerar" onclick="zera();"> 
    </body> 
    </html>

    terça-feira, 19 de junho de 2012 21:04
  • usei o evento onclientclick no botão para iniciar o tempo de execução. não usei antes, porque achei que poderia ocorrer algum conflito com o processamento.

    só que quando terminar de processar preciso chamar a função que para o tempo. como chamo essa função no asp.net (codebehind)?

    terça-feira, 19 de junho de 2012 21:17
  • Page.ClientScript.RegisterClientScriptBlock(GetType(), "pararContador", "para();", true);
    No inicia você deve passar uma função como parametro e não uma string com o nome da função.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455



    • Editado Murilo Kunze terça-feira, 19 de junho de 2012 21:45
    terça-feira, 19 de junho de 2012 21:44
  • murilo, não está funcionando da forma que vc me passou. o meu botão está como autopostback = true e o webform está dentro de um updatepanel.

    e no meu código existe um if. tipo:

    if label.text > 0 then

        'aconteceu erros durante o processamento

       Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "pararContador", "para();", True)

    end if

    porém, não está funcionado. mesmo depois do processamento ter parado continua o "cronômetro" em execução. como paro ele?

    terça-feira, 19 de junho de 2012 21:51
  • A contagem está funcionando?

    Usa 'var interval;' na primeira lina de código.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    terça-feira, 19 de junho de 2012 22:10
  • a contagem funciona, mas não está parando quando o processo termina.

    não entendi: 'usar var interval" na primeira linha de código? como assim?

    terça-feira, 19 de junho de 2012 22:13
  • Declara a variavel na primeira linha abaixo de <script>.

    No código que você mandou acima você não está criando ela.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    terça-feira, 19 de junho de 2012 22:25
  • cara a função para() é uma função já existente do javascript. eu só estou chamando a mesma. não estou usando nenhuma variável chamar interval em: Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "pararContador", "para();", True).

    ainda continuo sem entender o q vc quer fazer.

    de qualquer forma, coloquei o var interval, no começo da minha função para. porém, ainda não resolveu.


    • Editado rafa-martin terça-feira, 19 de junho de 2012 22:31 rr
    terça-feira, 19 de junho de 2012 22:28
  • hehehe

    deixa eu tentar explicar melhor..

    No código que você mostrou, você não estava criando a variavel interval...

    var interval; //declara ela
    
    function inicia(){
         interval = setInterval(funcao,1000);// usa ela aqui
    }
    
    function parar(){
         clearInterval(interval); //e usa ela aqui 
    }


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    terça-feira, 19 de junho de 2012 22:41
  • cara, como eu suspeitava não adiantou. veja:

    function formatatempo(segs) {
        min = 0;
        hr = 0;
        /* 
        if hr < 10 then hr = "0"&hr 
        if min < 10 then min = "0"&min 
        if segs < 10 then segs = "0"&segs 
        */
        while (segs >= 60) {
            if (segs >= 60) {
                segs = segs - 60;
                min = min + 1;
            }
        }
        while (min >= 60) {
            if (min >= 60) {
                min = min - 60;
                hr = hr + 1;
            }
        }
        if (hr < 10) { hr = "0" + hr }
        if (min < 10) { min = "0" + min }
        if (segs < 10) { segs = "0" + segs }
        fin = hr + ":" + min + ":" + segs
        return fin;
    }
    var segundos = 0; //inicio do cronometro
    var interval;
    function conta() {
        segundos++;
        document.getElementById("counter").innerHTML = formatatempo(segundos);
    }
    function inicia() {
        interval = setInterval("conta();", 1000);
    }
    function para() {
        clearInterval(interval);
    }
    function zera() {
        clearInterval(interval);
        segundos = 0;
        document.getElementById("counter").innerHTML = formatatempo(segundos);
    } 
    Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "pararContador", "para();", True)
    não rola. usando o stopwatch, não como incrementar numa lebal, por exemplo, o tempo para ficar na tela?

    terça-feira, 19 de junho de 2012 22:47
  • cara resolvido o problema. na verdade tem que ser assim:
    ScriptManager.RegisterClientScriptBlock(Page, Page.GetType, "zz", "para();", True)

    de qualquer forma obrigado pela ajuda.
    • Marcado como Resposta rafa-martin terça-feira, 19 de junho de 2012 22:54
    terça-feira, 19 de junho de 2012 22:54