方法一:

  public Form1()
  {
InitializeComponent();
    CheckForIllegalCrossThreadCalls = false;
  }

方法二:

using System;
using System.Threading;
using System.Windows.Forms;

namespace TestingUIThread
{
public partial class Form1 : Form
{
Thread thread = null;

public Form1()
{

InitializeComponent();
}

private void btnEnable_Click(object sender, EventArgs e)
{
thread = new Thread(new ParameterizedThreadStart(EnableButton));
thread.Start(null);
}

private void EnableButton(object o)
{
EnableButton();
}

private delegate void EnableButtonCallBack();

private void EnableButton()
{
if (this.btnTest.InvokeRequired)
{
this.Invoke(new EnableButtonCallBack(EnableButton));
}
else
{
btnTest.Enabled = true;
btnTest.Text = "Enabled";
}
}
}
}

方法三: 通过ISynchronizeInvoke和MethodInvoker.

using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;

namespace TestingUIThread
{
public partial class Form1 : Form
{
Thread thread = null;

public Form1()
{
InitializeComponent();
}

private void btnEnable_Click(object sender, EventArgs e)
{
thread = new Thread(new ParameterizedThreadStart(MyEnableButton));
thread.Start(null);
}

private void MyEnableButton(object sender)
{
ISynchronizeInvoke synchronizer = this;

if (synchronizer.InvokeRequired)
{
MethodInvoker minvoker = new MethodInvoker(this.EnableButton);
synchronizer.Invoke(minvoker, null);
}
else
{
this.EnableButton();
}
}

private void EnableButton()
{
btnTest.Enabled = true;
btnTest.Text = "Enabled";
}
}
}