Использование потоков для обновления меток после получения строки из Bluetooth - PullRequest
4 голосов
/ 12 июля 2010

Привет всем, у меня есть поток, который может читать данные, полученные через поток Bluetooth.Со стороны отправителя я сделал цикл while, в котором число увеличивается + 1. Я сделал messagebox.show (test);и это работает нормально, но когда я делаю label.text = test, я получаю:

"Control.Invoke должен использоваться для взаимодействия с элементами управления, созданными в отдельном потоке."ошибка.Мой следующий код в C #:

Thread t = new Thread (new ThreadStart (readStream));t.Start ();public void readStream () {while (true) {String test = manager.Reader.ReadLine ();label1.Text = test;}}

Мой вопрос: как мне обновить ярлык в теме?Какие-нибудь простые способы управления вызовом?

1 Ответ

6 голосов
/ 12 июля 2010

Здравствуйте, вот пример, как это сделать:

http://msdn.microsoft.com/en-us/library/ms171728.aspx

Вам следует использовать функцию, подобную этой, если вы хотите обновить метку из другого потока.Вы не можете обновить его напрямую.

Короче говоря: вы должны написать что-то вроде этого:

delegate void SetTextCallback(string text);

private void SetText(string text)
{
  // InvokeRequired required compares the thread ID of the
  // calling thread to the thread ID of the creating thread.
  // If these threads are different, it returns true.
  if (this.textBox1.InvokeRequired)
  { 
    SetTextCallback d = new SetTextCallback(SetText);
    this.Invoke(d, new object[] { text });
  }
  else
  {
    this.textBox1.Text = text;
  }
}
...