我的代碼啓動後臺線程。後臺線程進行更改,並希望主線程中的UI更新。一個啓動然後線程等待的代碼看起來是這樣的:WPF:從後臺線程更新UI問題
Thread fThread = new Thread(new ThreadStart(PerformSync));
fThread.IsBackground = true;
fThread.Start();
fThread.Join();
MessageBox.Show("Synchronization complete");
當背景要更新UI,它設置一個StatusMessage並調用下面的代碼:
static StatusMessage _statusMessage;
public delegate void AddStatusDelegate();
private void AddStatus()
{
AddStatusDelegate methodForUIThread = delegate
{
_statusMessageList.Add(_statusMessage);
};
this.Dispatcher.BeginInvoke(methodForUIThread, System.Windows.Threading.DispatcherPriority.Send);
}
_statusMessageList是一個ObservableCollection這是ListBox的來源。
AddStatus方法被調用,但主線程上的代碼從不執行 - 也就是說,當線程正在執行時,_statusMessage不會被添加到_statusMessageList。但是,一旦它完成(fThread.Join()返回),就會執行主線程上的所有堆積調用。
但是,如果我在fThread.Start()和fThread.Join()的調用之間顯示消息框,則狀態消息會正確更新。
我需要改變什麼,以便主線程中的代碼在等待線程終止的時候執行(UI更新)?
謝謝。