我遇到了一个奇怪的问题,我想知道它是否正常,或者我是否遗漏了什么。
情况如下:
Game.OnExiting()
方法来调用我的Web服务,我在此行上设置了一个断点由于游戏正在退出,服务器上是否正在处理呼叫是否正常?
以下是代码:
protected override void OnExiting(object sender, EventArgs args)
{
if (GameManager.Instance.IsOnlineGame && !Guide.IsVisible)
{
GameManager.Instance.Multiplayer.QuitGame();
}
base.OnExiting(sender, args);
}
internal void QuitGame()
{
_client.QuitGameAsync(GameManager.Instance.GameId, _myRank);
}
答案 0 :(得分:3)
您的应用只有很短的时间才能退出时执行任何操作。调用Web服务可能比您允许的时间更长。
从您发布的代码数量来看,不清楚哪些资源可用于拨打电话(以及传递必要的数据)。
如果您这样做,则不应该依赖于发送到服务器的消息。这可能会对您的应用逻辑产生影响。
答案 1 :(得分:0)
科学解释:
从UI线程调度HttpWebRequests,因此如果您的应用/游戏UI线程在您退出游戏的呼叫后永远不会更新,则永远不会发送请求。您可以通过创建Web请求进行测试,然后循环直到请求完成(等待异步结果完成状态) - 请求永远不会被发送,您将永远等待。您可以尝试引入几百毫秒的延迟(不会将UI线程置于休眠状态,这仍会阻止请求)并查看是否发出了请求。在XNA中,这意味着对一些更新调用什么都不做,以查看是否发送了请求。你也可以使用计时器。