【发布时间】:2010-05-19 03:16:39
【问题描述】:
我的代码启动了一个后台线程。后台线程进行更改并希望主线程中的 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 更新)?
谢谢。
【问题讨论】:
标签: wpf multithreading