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