例えばボタンの文字列をスレッドから書き換える
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(loop));
 t.Start();
}
void loop()
{
//for (int i = 0; i < 1000; i++)
//{
// button1.Text = "new text";
// Thread.Sleep(50);
//}
SetText("New Text");
}
private delegate void SetTextCallback(string msg);

private void SetText(string msg)
{
if (button1.InvokeRequired)
{
Invoke((MethodInvoker)(()=> {
button1.Text = msg; // "Hello, world";
}));

return;
}

// 以下本来の処理
button1.Text = msg;
}
}