none
Interface Carregada RRS feed

  • Pergunta

  • Boa tarde a todos. Eu estou fazendo um sistema que possui uma interface extremamente carregada!!! É uma aplicação MDI que possui vários forms abertos que exibem alguns dados...

    Ela funciona da seguinte forma: O Load inicial dos dados é feito consumindo um WebService. Após isso, ele se conecta em um servidor e fica recebendo as atualizações das informações via Sockets... Eu "trato" a informação que o servidor me mandae a incluo no DataTable que já existe (o que foi definido na propriedade DataSource do DataGrid).

    Ex.:

    public void CarregarDados()
    {
        try
        {
            this.dtg.SuspendLayout();
            DataSet ds = ws.Carregar();
            this.dtg.DataSource = ds.Tables[0];
        }
        catch (Exception ex)
        {
            ExibirErro(ex);
        }
        finally
        {
            this.dtg.ResumeLayout();
        }
    }

    public void On_DadoRecebido(string xml)
    {
        try
        {
            this.dtg.SuspendLayout();
            /* trato a informação, crio um novo DataRow com esta informação e o adiciono no grid */
        }
        catch(Exception ex)
        {
            ExibirErro(ex);
        }
        finally
        {
            this.dtgResumeLayout();
        }
    }

    Minha interface as vezes dá umas "travadas". O processamento vai lá no alto. Eu experimentei não definir o DataSource do Grid e manter este DataTable em memória porém não exibindo no grid. Assim, o processamento da minha máquina ficou muuuiitoo melhor. Chego a conclusão que o problema está na hora que o DataGrid faz o "Paint" dos dados... Estou correto? Existe alguma outra forma de trabalhar com dados vindos de um DataTable de forma mais rápida? Existe alguma outra forma de trabalhar com o DataGrid ou senão, existe algum outro DataGrid que não apresente este comportamento

    Obrigado. Boa Tarde.

    quarta-feira, 24 de janeiro de 2007 17:53

Todas as Respostas

  • Valdek,

    Você experimentou colocar essa funcionalidade em uma thread?
    Assim ela seria executada em modo background e você poderia controlar tudo usando uma ProgressBar, por exemplo.

    Assim, todo o carregamento do DataGrid seria feito à parte, e o MDI seria carregado normalmente, sem depender de aguardar o término do processamento do DataGrid.

    quarta-feira, 24 de janeiro de 2007 18:14