На вашей MainForm сделайте функцию для установки текстового поля проверок InvokeRequired
public void AppendTextBox(string value)
{
if (InvokeRequired)
{
this.Invoke(new Action<string>(AppendTextBox), new object[] {value});
return;
}
ActiveForm.Text += value;
}
хотя в вашем статическом методе вы не можете просто вызвать.
WindowsFormsApplication1.Form1.AppendTextBox("hi. ");
у вас где-то должна быть статическая ссылка на Form1, но это на самом деле не рекомендуется и не нужно, можете ли вы просто сделать функцию SampleFunction не статичной, если это так, тогда вы можете просто вызвать
AppendTextBox("hi. ");
Он будет добавлен в другой поток и перенаправлен в пользовательский интерфейс с помощью вызова Invoke, если требуется.
Полный образец
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
new Thread(SampleFunction).Start();
}
public void AppendTextBox(string value)
{
if (InvokeRequired)
{
this.Invoke(new Action<string>(AppendTextBox), new object[] {value});
return;
}
textBox1.Text += value;
}
void SampleFunction()
{
// Gets executed on a seperate thread and
// doesn't block the UI while sleeping
for(int i = 0; i<5; i++)
{
AppendTextBox("hi. ");
Thread.Sleep(1000);
}
}
}