Sempre que eu precisava falar com algum text box fora de uma Thread eu usava uma variavel global para isso. Mas depois de googlear com calma descobri que tem como fazer isso com mais.... Classe...
Inclua
using System.Threading;
No evento de Click de botao coloque o seguinte codigo:
Thread t = new Thread(new ThreadStart(SayHiThread));
t.IsBackground = true;
t.Start();
Coloque esse codigo dentro do Form
private void SayHiThread()
{
Invoke(new SayHiDelegate(SayHi), new object [] { "Hello from the thread" });
}
private void SayHi(string msg)
{
myTextbox.Text = msg;
}
Fora do classe do Form coloque
public delegate void SayHiDelegate(string msg);
Tambem eh possivel tambem passar mais de uma variavel para o delegate, por exemplo
public delegate void Escreve(string Texto, Color Cor);
private void Escreve_Texto(string Texto, Color Cor)
{
myRichTextBox.text = Texto;
myRichTextBox.Color = Cor;
}
Dentro da Thread
Invoke(new Escreve(Escreve_Texto), new object[] { "Oi da thread.", Color.Red });
Artigo original de: James T. Johnson