Тема не работает - PullRequest
       1

Тема не работает

0 голосов
/ 07 января 2012

Может кто-нибудь сказать мне, почему приведенный ниже код не работает?

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");
        }            
    }
}

1 Ответ

6 голосов
/ 07 января 2012

Проблема в том, что вы пытаетесь изменить элемент пользовательского интерфейса Winforms из фонового потока.Это специально не допускается моделью WinForms.Элементы пользовательского интерфейса могут быть изменены только из основного потока.Вам нужно использовать Control.Invoke, чтобы вернуть контекст обратно в соответствующий поток.

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

  try {
    this.Invoke(action);
  } catch(InvalidOperationException ex) {
     MessageBox.Show("HI");
  }
}
...