私のコードでは、別のスレッドで発生するイベントをサブスクライブしています。このイベントが発生するたびに、監視可能なコレクションに投稿される文字列を受け取ります。
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 引数をいくつか試しましたが、効果がないようです。