В моем коде я подписываюсь на событие, которое происходит в другом потоке.Каждый раз, когда происходит это событие, я получаю строку, которая публикуется в наблюдаемой коллекции:
Dispatcher currentDispatcher = Dispatcher.CurrentDispatcher;
var SerialLog = new ObservableCollection<string>();
private void hitStation_RawCommandSent(object sender, StringEventArgs e)
{
string command = e.Value.Replace("\r\n", "");
Action dispatchAction = () => SerialLog.Add(command);
currentDispatcher.BeginInvoke(dispatchAction, DispatcherPriority.Render);
}
Код ниже находится в моей модели представления (может быть в коде позади, это не имеет значения в этомдело).Когда я вызываю «hittation.PrepareHit», указанное выше событие вызывается пару раз, затем я жду и вызываю «hitStation.HitBall», а указанное выше событие вызывается еще пару раз.
private void HitBall()
{
try
{
try
{
Mouse.OverrideCursor = Cursors.Wait;
//prepare hit
hitStation.PrepareHit(hitSpeed);
Thread.Wait(1000);
PlayWarning();
//hit
hitStation.HitBall(hitSpeed);
}
catch (TimeoutException ex)
{
MessageBox.Show("Timeout hitting ball: " + ex.Message);
}
}
finally
{
Mouse.OverrideCursor = null;
}
}
У меня проблема в том, что ListBox, связанный с моим SerialLog, обновляется только после завершения метода HitBall.Я ожидал увидеть кучу обновлений от PrepareHit, паузу и еще кучу обновлений от HitBall.
Я пробовал пару аргументов DispatcherPriority, но, похоже, они не имеют никакого эффекта.