【发布时间】:2012-12-17 10:05:30
【问题描述】:
我正在设计一款 silverlight 游戏,但我被游戏结束功能所困扰。这是一款回合制纸牌游戏,我使用的是 WCF Duplex。但是当我调用 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));
}
}
【问题讨论】:
-
Finalize方法在哪里调用,方法本身在哪里? -
这是游戏的最后阶段,计算游戏结果并开始新游戏。在服务端调用 Finalize 方法将 OnFinalize 发送到回调
标签: wcf silverlight task-parallel-library duplex