none
Thread que carrega uma datagridview RRS feed

  • Pergunta

  • Tenho uma consulta SQL que demora um tem considerável para gerar todos os registros devido a grande quantidade de registros retornados e para o formulario não ficar congelado e não ficar travando o usuário estou querendo utilizar uma Thread para isso mas quando temos uma Thread não consigo inserir dentro do metodo que esta na Thread para que este carregue um objeto na tela e eu precisaria carregar uma datagridview a partir dessa rotina que esta na thread alguem teria uma dica ou exemplo simples de como se fazer isso

    Junior

    segunda-feira, 4 de novembro de 2013 23:01

Respostas

  • Muito obrigado pela resposta creio que isso ja me ajude sim, valeu mesmo.

    Junior

    • Marcado como Resposta Junior Martins terça-feira, 5 de novembro de 2013 09:44
    terça-feira, 5 de novembro de 2013 09:44
  • Ou Assim:

    private void ButCarregar_Click(object sender, EventArgs e)
    {
    	ButCarregar.Enabled = false;
    	ButCarregar.Update();
    	CallGrid();
    	ButCarregar.Enabled = true;
    	ButCarregar.Update();
    }
    private delegate void CallGridInvoked();
    private async Task CallGrid()
    {            
    	DaoPessoas dal = new DaoPessoas();
    	var Resultado = await dal.All();
    	DataGridViewPessoas.DataSource = Resultado.ToList();
    	DataGridViewPessoas.Update();            
    }
    
    //classe utilizada
    public class Pessoa
    {
    	public Pessoa() { }
    	public Pessoa(int Id, string Nome) {
    		this.Id = Id;
    		this.Nome = Nome;
    	}
    	public int Id { get; set; }
    	public string Nome { get; set; }
    }
    public class DaoPessoas
    {
    	public async Task<List<Pessoa>> All()
    	{
    		List<Pessoa> pessoas = new List<Pessoa>();
    		for (int i = 1; i < 1000001; i++)
    			pessoas.Add(new Pessoa(i, string.Format("Name {0}", i)));
    		return pessoas;
    	}
    }


    Fúlvio Cezar Canducci Dias

    • Marcado como Resposta Junior Martins terça-feira, 5 de novembro de 2013 09:44
    segunda-feira, 4 de novembro de 2013 23:41

Todas as Respostas

  • Pode explicar melhor, se possível tirar PRINTS e colar seu código de carregamento do GRID

    Leonardo Lourenço Silva


    segunda-feira, 4 de novembro de 2013 23:10
  • É o seguinte, meu codigo esta no meu trabalho e aqui não o tenho mas é coisa "simples"

    Tenho um metodo que executa uma query SQL que demora um bom tempo e como não quero que tela do sistema congele nem que fique travando o usuario gostaria de inserir o metodo para executar em uma Thread e esse metodo carregaria uma datagridview

    Private void carrega() {

    sSQL = "SELECT CAMPOS FROM TABELA WHERE .... ";
    dataAdp = new OledbDataAdapter(sSQL,cn);
    dt = new DataTable();
    dataAdp.Fill(dt);
    grid.datasource = dt;

    }

    Esse codigo exemplo acima seria executado dentro da Thread


    Junior

    segunda-feira, 4 de novembro de 2013 23:17
  • private void ButCarregar_Click(object sender, EventArgs e)
    {
    	Task taskGrid = new Task(() => CallGrid());            
    	taskGrid.Start();            
    }
    private delegate void CallGridInvoked();
    private void CallGrid()
    {
    	if (DataGridViewPessoas.InvokeRequired)
    	{
    		CallGridInvoked _CallGridInvoked = new CallGridInvoked(CallGrid);
    		DataGridViewPessoas.Invoke(_CallGridInvoked);
    	}
    	else
    	{
    		DaoPessoas dal = new DaoPessoas();
    		DataGridViewPessoas.DataSource = dal.All().ToList();
    		DataGridViewPessoas.Update();
    	}
    }
    Eu fiz um exemplo quem sabe possa lhe ajudar!!!

    Fúlvio Cezar Canducci Dias

    segunda-feira, 4 de novembro de 2013 23:31
  • Ou Assim:

    private void ButCarregar_Click(object sender, EventArgs e)
    {
    	ButCarregar.Enabled = false;
    	ButCarregar.Update();
    	CallGrid();
    	ButCarregar.Enabled = true;
    	ButCarregar.Update();
    }
    private delegate void CallGridInvoked();
    private async Task CallGrid()
    {            
    	DaoPessoas dal = new DaoPessoas();
    	var Resultado = await dal.All();
    	DataGridViewPessoas.DataSource = Resultado.ToList();
    	DataGridViewPessoas.Update();            
    }
    
    //classe utilizada
    public class Pessoa
    {
    	public Pessoa() { }
    	public Pessoa(int Id, string Nome) {
    		this.Id = Id;
    		this.Nome = Nome;
    	}
    	public int Id { get; set; }
    	public string Nome { get; set; }
    }
    public class DaoPessoas
    {
    	public async Task<List<Pessoa>> All()
    	{
    		List<Pessoa> pessoas = new List<Pessoa>();
    		for (int i = 1; i < 1000001; i++)
    			pessoas.Add(new Pessoa(i, string.Format("Name {0}", i)));
    		return pessoas;
    	}
    }


    Fúlvio Cezar Canducci Dias

    • Marcado como Resposta Junior Martins terça-feira, 5 de novembro de 2013 09:44
    segunda-feira, 4 de novembro de 2013 23:41
  • Muito obrigado pela resposta creio que isso ja me ajude sim, valeu mesmo.

    Junior

    • Marcado como Resposta Junior Martins terça-feira, 5 de novembro de 2013 09:44
    terça-feira, 5 de novembro de 2013 09:44