私はSilverlightゲームを設計していますが、ゲームの終了機能にこだわっています。ターン制のカードゲームで、WCFデュプレックスを使用しています。しかし、finalize関数を呼び出すと、コールバックはOnFinalizedメッセージの前にOnEndGameメッセージを受信しています。新しいゲームを開始する前に、クライアントでいくつかのアニメーションを再生するためにそれが必要です。Thread.SleepやTask.Waitなど、いろいろ試してみましたが、問題がわかりませんでした。EndGameメソッドが戻るまでの時間を与えるにはどうすればよいですか?
private void FinalizeGame()
{
this.GameState = Enums.GameState.Finalize;
Task.Factory.StartNew(()=>{
CalculateWinners();
GameSubscriptionManager.Publish(SubscriptionType.GameStream, cb => cb.OnFinalize(this));
}).ContinueWith((antecedent)=>{
EndGame();
});
}
private void EndGame()
{
this.GameState = Enums.GameState.None;
Thread.Sleep(5000);
GameSubscriptionManager.Publish(cb => cb.OnEndGame(this));
RemovePlayersAndGetWaitingPlayers();
if (PlayingPlayers.Count > 1)
{
ResetGame();
StartGame();
}
else
{
GameState = GameState.None;
GameSubscriptionManager.Publish(cb => cb.OnWaitingForNewPlayers(this));
}
}