Skip to main content

Exibindo processo que ocorrem durante o program para o usuário

Hoje veremos como exibir para o usuário quais os passos que o programa faz durante um processo referente a regra de negocio.
A finalidade é mostrar o que esta sendo feito pois as vezes o program pode demorar um pouco para responder devido a um processo na maquina ou até um envio de e-mail.
Crie um novo WebApplication no visual Studio.

Na pagina Default.aspx da aplicação vamos colocar alguns campos simples para simular um formulário.
Ex:
<style type="text/css">
    .campo{
padding:5px;
        float:left;    
    }
</style>    
<script language="javascript" type="text/javascript">
    
    function RespostaServidor(ResultString) {
        var result = document.getElementById("result");
        result.innerHTML = ResultString;
    }

    function SalvarDados() {
        var form = new GetForm()
        PageMethods.Salvar(form, RespostaServidor);
        PageMethods.EnviarEmail(RespostaServidor);
        PageMethods.Concluir(RespostaServidor);
    }

    function GetForm() {
        this.Nome = $get("txbNome").value;
        this.Telefone = $get("txbTelefone").value;
        this.Email = $get("txbEmail").value;
    } 
</script>
<div class="campo">
Nome
<input id="txbNome" type="text" />
    </div>
<div class="campo">
Telefone
<input id="txbTelefone" type="text" />
    </div>
<div class="campo">
E-mail
<input id="txbEmail" type="text" />
    </div>
<div>
<input onclick="SalvarDados();" type="button" value="Salvar" />
        <span id="result"></span>
    </div>

A classe JavaScript "GetForm()" é um modelo para capturar os dados do formulário, e é recebida pelo C# no tipo "Dictionary<string,string>".
Criei um WebMethod para cada ação que será executada pelo servidor e as utilizei na função javascript "SalvarDados()" que por sua vez armazena a resposta do servidor em uma outra função "RespostaServidor(ResultString)" apresentando a resposta do webMethod na tag <span id="result"></span>.

Para simular o tempo de processo no servidor utilizei Thread.Sleep(3000);
Veja na listagem a baixo como ficaram os webMethods:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
using System.Web.Services;

namespace TesteAssincronoMetodos
{
    public partial class _Default : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
           
           
        }
        public string PublicRetorno(Dictionary form, string text)
     {

            switch (text)
            { 
                case "Inicio" : text = "Salvando dados do usuário "+form["Nome"]; break;
                case "Enviando Email...": text = "Enviando Email " + form["Email"] + "..."; Thread.Sleep(3000); break;
                case "Concluido": Thread.Sleep(3000); break;
            }
           
            return text;
     }

        #region WebMethods
        [WebMethod]
        public static string Salvar(Dictionary jsForm)
        {
            Form_ = jsForm;
            string msg = new TesteAssincronoMetodos._Default().PublicRetorno(jsForm,"Inicio");
            return msg;
        }
        [WebMethod]
        public static string EnviarEmail()
        {

            string msg = new TesteAssincronoMetodos._Default().PublicRetorno(Form_, "Enviando Email...");
            return msg;
        }
        [WebMethod]
        public static string Concluir()
        {
            string msg = new TesteAssincronoMetodos._Default().PublicRetorno(null,"Concluido");
            return msg;
        }
        #endregion

        public static Dictionary Form_ { get; set; }

    }
}

É isso ai galera qualquer duvida ou sugestão basta entrar com contato.

Comments