2016-07-18 24 views
1

Mein Hauptprozess:Kann nicht mit Invoke aktualisieren UI() und BeginInvoke() in C#

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

Mein Thread-Funktion:

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

Egal ich versuchte Invoke() oder BeginInvoke zu verwenden (), Ich kann den Text in textBox1 nicht aktualisieren. Ich habe auch versucht, einen anderen Weg:

public delegate void UpdateTextCallback(string text); 

Es kann mich immer noch nicht helfen, meine textBox1 zu aktualisieren.

Hilf mir, herauszufinden, was ich verpasst habe. Vielen Dank.

+0

Ich fand, dass jedes Mal, wenn die m_last aktualisiert wurde, die Eigenschaft textBox1.InvokeRequired wahr war. Nach Abschluss dieses Prozesses "this.textBox1.BeginInvoke ((MethosInvoker) delegate() {this.textBox1.Text = msg;};" war die InvokeRequired-Eigenschaft immer noch wahr. So kann es nicht zu "else" gehen Bedingung, um meine TextBox1 zu aktualisieren. –

Antwort

0

setzen ein Argument vor dem Thread:

Application.DoEvents(); 

und es sollte nach dem m_last wurde aktualisiert gestellt werden.

+0

Ich versuchte es auf diese Weise, und es funktioniert !! Meine TextBox1 wurde erfolgreich aktualisiert. –