Olá pessoal,

Mais um pequeno tutorial, este praticado com visual c# express. Cross Thread ocorre quando aplicamos uma nova Thread em nossa aplicação e neste precisamos trabalhar com componentes do nosso form como textbox.

Exemplo:

// Criação da variável
Thread pross;

private
void Form1_Load(object sender, EventArgs e)
{
// Instância a variável
pross =
new Thread(Work);
// Define para trabalhar em background
pross.IsBackground =
true;
pross.Start();
}

private void Work()
{
MostraDados();
}

private
void MostraDados()
{

textBox1.Text = "primeiro box";
textBox2.Text =
"segundo box";
textBox3.Text =
"terceiro box";

}

Neste exemplo, um erro é mostrado:

InvalidOperationException was unhandle:
Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on.


Informando que o componente textBox1, não pertence a Thread em questão, por este motivo não é possível manipular sua propriedade, para isto você deve utilizar a Thread que o criou.


Solução:

Assim devemos então criar um delegate na Thread original e utilizar o método Invoke dos componentes para manipularmos.

Exemplo:


// Criação da variável
Thread
pross;
// Criação do Delegate na Thread original
delegate void Worker(TextBox textBox, string Texto);

private void Work()
{
MostraDados();
}

private void MostraDados()
{

if (textBox1.InvokeRequired)
{

Worker worker = new Worker(this.Preenche);
textBox1.Invoke(worker, textBox1,
"primeiro box");

}

if (textBox2.InvokeRequired)
{

Worker worker = new Worker(this.Preenche);
textBox2.Invoke(worker, textBox2,
"segundo textbox, esse com mais texto");

}

if (textBox3.InvokeRequired)
{

Worker worker = new Worker(this.Preenche);
textBox3.Invoke(worker, textBox3,
"terceito textbox, fazendo mais testes");

}
}

private void Preenche(TextBox textBox, string Texto)
{
textBox.Text = Texto;
}

private void Form1_Load(object sender, EventArgs e)
{
// Instância a variável
pross =
new Thread(Work);
// Define para trabalhar em background
pross.IsBackground =
true
;
pross.Start();
}



Isto é só por enquanto pessoal, qualquer dúvida, crítica ou sugestões por favor façam.
Até a próxima.


Você gostou? Comente no fórum!

Mais recentes em .Net

Dez razões para adotar o asp.net 3.5
Por DPLF - 10 razões para adotar o asp.net 3.5publicado em: 20/03/2008...
Download de arquivos com asp.net
Por Leonard - Iremos aprender como fazer download de arquivos com o asp.net...
Emitindo beep com c#
Por Leonard - Iremos aprender como emitir um beep apartir de uma dll no c#...
Utilizando estilo css no site
Por juliana ribeiro - Neste tutorial iremos aprender a utilizar cascading...
Identificando teclas (keypress)
Por Ricardo M Machado - Ola pessoal, - mais um pequeno tutorial, rápido e prático....

Ver mais Artigos de .Net.

Ver e retirar outras dúvidas no fórum Webly.

Alguns Direitos Reservados | RSS | O Fórum

Webly Portal e Fóruns - Internet + Humana | Design by ArthurHenrique.com