2017-04-12 67 views
0

我试图在消息到达时从事件处理程序更新富文本框。由于某些原因,当所有消息到达时,富文本框只会在最后更新。从事件处理程序更新富文本框

代码我使用:

private void OutputMessageToLogWindow(string message) 
    { 




     Application.Current.Dispatcher.BeginInvoke(new Action(() => 
     { 
      outputRichTxtBox.AppendText(message); 
      test.Text = message; 
     })); 
    } 
+0

尝试过。一样 –

回答

1

我觉得是你的代码是不是线程安全的,并发的消息的情况下,有可能是某些消息将不通过执行以下更新在同一时间线:

outputRichTxtBox.AppendText(message); 
test.Text = message; 

因此,为了使线程安全的,我会建议使用lockBeingInvoke方法内:

private static readonly object synchLock = new object(); 

private void OutputMessageToLogWindow(string message) 
{ 
    Application.Current.Dispatcher.BeginInvoke(new Action(() => 
    { 
     lock(synchLock) 
     { 
      outputRichTxtBox.AppendText(message); 
      test.Text = message; 
     } 
    })); 
}