我的代码启动后台线程。后台线程进行更改,并希望主线程中的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更新)?
谢谢。