线程无效

Cod*_*ive 0 .net c# c#-4.0

有人能告诉我为什么以下代码不起作用?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Thread t = new Thread(rtb2);
        t.Start();
    }

    private void rtb2()
    {
        try
        {
            richTextBox1.Text = "1";                
        }
        catch(InvalidOperationException ex)
        {
            MessageBox.Show("HI");
        }            
    }
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 6

问题是您尝试从后台线程修改Winforms UI元素.WinForms模型特别不允许这样做.UI元素只能从主线程修改.您需要使用Control.Invoke以便将上下文返回到相应的线程.

private void rtb2() {
  Action action = delegate {
    richTextBox1.Text = "1";
  };

  try {
    this.Invoke(action);
  } catch(InvalidOperationException ex) {
     MessageBox.Show("HI");
  }
}
Run Code Online (Sandbox Code Playgroud)