Мой код запускает фоновый поток. Фоновый поток вносит изменения и хочет обновить пользовательский интерфейс в основном потоке. Код, который запускает поток, затем ждет, выглядит примерно так:
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 (), то сообщения о состоянии обновляются правильно.
Что мне нужно изменить, чтобы код в основном потоке выполнялся (обновления пользовательского интерфейса), ожидая завершения потока?
Спасибо.