2016-07-18 3 views
1

Мой главный процесс:Невозможно обновить пользовательский интерфейс с Invoke() и BeginInvoke() в C#

public void quoteStartReceive() 
{ 
    Thread thdWrite = new Thread(new ThreadStart(DoParseGUIDisplay)); 
    thdWrite.IsBackground = true; 
    thdWrite.Start(); 
} 

Моя функция потока:

void DoParseGUIDisplay() 
{ 
    for (int i = 0; i < 1024; i++) 
    { 
     if (myQueue.Count > 0) 
     { 
      string strOut = myQueue.Dequeue().ToString(); 
      Tick tick = new Tick(strOut); 
      if (tick.m_last != "") 
      { 
       string msg = "Update Text"; 

       if (this.textBox1.InvokeRequired) 
       { 
        this.textBox1.BeginInvoke((MethosInvoker)delegate() {this.textBox1.Text = msg; }; 
       } 
       else 
       { 
        this.textBox1.Text = msg; 
       } 
      } 
     } 
    } 
} 

Независимо от того, я пытался использовать Invoke() или BeginInvoke (), Я не могу обновить текст в textBox1. Я также попробовал другой путь:

public delegate void UpdateTextCallback(string text); 

Он по-прежнему не может помочь мне обновить мою textBox1.

Помогите мне узнать, что я пропустил. Благодарю.

+0

Я обнаружил, что каждый раз, когда обновлялся m_last, свойство textBox1.InvokeRequired было true. После завершения этого процесса «this.textBox1.BeginInvoke ((MethosInvoker) delegate() {this.textBox1.Text = msg;};», свойство InvokeRequired все еще было правдой. Таким образом, он не может перейти в «else», условие для обновления моего textBox1. –

ответ

0

положить аргумент до резьбы:

Application.DoEvents(); 

и его следует поместить после m_last было обновлено.

+0

Я пробовал этот путь, и он работает !! Мой textBox1 был успешно обновлен. –

Смежные вопросы