В моем коде запускается фоновый поток. Фоновый поток вносит изменения и хочет, чтобы пользовательский интерфейс в основном потоке обновлялся. Код, который запускает поток затем ждет выглядит что-то вроде:WPF: выпуск обновления интерфейса из фоновой темы
Thread fThread = new Thread(new ThreadStart(PerformSync));
fThread.IsBackground = true;
fThread.Start();
fThread.Join();
MessageBox.Show("Synchronization complete");
Когда фон хочет обновить пользовательский интерфейс, он устанавливает 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(), сообщения о состоянии обновляются соответствующим образом.
Что нужно изменить, чтобы код в основном потоке выполнялся (обновления пользовательского интерфейса) в ожидании завершения потока?
Спасибо.