在我的代码中,我订阅了在不同线程上发生的事件。每次发生此事件时,我都会收到一个发布到可观察集合的字符串:
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);
}
下面的代码在我的视图模型中(可能在后面的代码中,在这种情况下无关紧要)。当我调用“hitstation.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;
}
}
我遇到的问题是绑定到我的 SerialLog 的 ListBox 只有在 HitBall 方法完成时才会更新。我期待看到来自 PrepareHit 的一堆更新,一个暂停,然后是来自 HitBall 的更多更新。
我尝试了几个 DispatcherPriority 参数,但它们似乎没有任何效果。