essa semana eu estive estudando (um pouco) a utilização de Thread’s para carregar-mos informações em forms. Depois de alguns problemas com as thread’s creio que consegui chegar em uma formula bem legal e gostaria de compartilhar com todos.
Passo 1 – Definir o que precisa ser carregado
Não é necessário dizer que carregar tudo com thread’s não seria legal. Então, moderação!!!
Passo 2 – Criar o método de carga
Devemos criar o método para carregar os dados como se fosse-mos trabalhar sem o multi-threading
Passo 3 – Declarar Objetos
Temos de declarar apenas 2 objeto s (Uma Thread e um Delegate)
private delegate void LoadDelegate(DataTable source); // Objeto Delegate com a Mesma Assinatura do Método de Iteração com o Controle private System.Threading.Thread _Thread; // Objeto de Thread
Passo 4 – Inicializar a Thread
No Construtor, Form_Load ou no lugar que mais lhe agradar, inicialize a Thread
_Thread = new Thread(new ThreadStart(LoadDataThread)); _Thread.IsBackground = true; // Configura a Thread para Rodar em Background _Thread.Start(); // Ativa a Thread
Passo 5 – Precisamos Definir a Iteração da Thread Criada com o Objeto da Interface de Usuário
Acontece que uma Thread não pode iteragir com o objeto criado por outra thread (estamos falando de objetos de interface de usuário “grids, labels, etc”). Iremos utilizar o método “BeginInvoke()” do controle de interface para essa operação.
this.dataGridView1.BeginInvoke(new LoadDelegate(FillData), new object[] { ds.Tables[0] });
Procedemos desta forma pois o método “BeginInvoke” será executado pela Thread que criou o controle “dataGridView1″ (Thread Principal) e utilizamos o Delegate para que esse método possa ser o responsável pela chamada ao método que irá realizar o DataBind com o “dataGridView1″. O método “BeginInvoke()” irá executar o Delegate e por sua vez o método “FillData”.
Posts Relacionados:



1 Reposta to “Windows Forms : Utilizando Thread’s para Carregar Informações”
charles
3 months ago
tem algum exeplo desse completo pois nao deu pra entender bem como aplicalo. gostaria de usar essa ideia para um programa cliente/servidor onde as mensagem das classes cliente/servidor sao enviadas ao frame principal.
vlw
espero que posso ajudar-me!!