我正在尝试为一款游戏构建界面。这个游戏持续1分钟。 GetStop 方法在60秒后停止游戏。 play 方法开始游戏,而 quit 方法则退出游戏。现在理想情况下,如果我在30秒后退出游戏,则计时器应该被重置,当我再次点击“播放”按钮时,计时器应该再次运行1分钟。这样下一局游戏将运行1分钟。如果我再次按下“退出”按钮,则计时器应为下一场比赛重置。
然而,我的代码似乎存在某些问题。每当我执行 quit 方法时,计时器似乎会保留在那个状态。所以,如果我在30秒内退出比赛,那么下一场比赛只会持续30秒。如果我在50秒时退出比赛,那么下一场比赛将只持续10秒。理想情况下,计时器应该被重置,但它未被重置。
我已经没有更多的想法了。有人能提供一些建议吗?
private async Task GetStop(CancellationToken token)
{
await Task.Run(async () =>
{
token.ThrowIfCancellationRequested();
await Task.Delay(TimeSpan.FromSeconds(60), token);
token.ThrowIfCancellationRequested();
if (!token.IsCancellationRequested)
{
sendMessage((byte)ACMessage.AC_ESCAPE);
}
}, token);
}
public async void Play()
{
sendMessage((byte)ACMessage.AC_START_RACE);
_cts.Cancel();
if (_cts != null)
{
_cts.Dispose();
_cts = null;
}
_cts = new CancellationTokenSource();
await GetStop(_cts.Token);
}
public void Quit()
{
_cts.Cancel();
if (_cts != null)
{
_cts.Dispose();
_cts = null;
}
//
}