C# 保存特定的计时器刻度
我正在用Winforms(c#)创建一个游戏,我制作了一个计时器来跟踪正在进行的时间,当游戏停止时计时器停止。但我还没有成功地节省计时器显示的游戏停止并发布的时间 这就是我如何建立定时器功能C# 保存特定的计时器刻度,c#,winforms,timer,C#,Winforms,Timer,我正在用Winforms(c#)创建一个游戏,我制作了一个计时器来跟踪正在进行的时间,当游戏停止时计时器停止。但我还没有成功地节省计时器显示的游戏停止并发布的时间 这就是我如何建立定时器功能 private Timer timers; public event EventHandler Tick; StartGame() { ... timers = new Timer(); timers.Interval = 1000; timers.Tick += new EventHan
private Timer timers;
public event EventHandler Tick;
StartGame()
{
...
timers = new Timer();
timers.Interval = 1000;
timers.Tick += new EventHandler(TimerTick);
timers.Enabled = true;
}
private void TimerTick(object sender, EventArgs e)
{
Time++;
OnTick();
}
protected void OnTick()
{
if (Tick != null)
{
Tick(this, new EventArgs());
}
}
不要用计时器来测量时间——计时器从来都不精确,它们应该用来触发事件,仅此而已。尤其是
System.Windows.Forms.Timer
,它运行在GUI线程中,可能被其他消息阻止
根据你的问题,你想要追踪比赛时间。我会这样做:
private Stopwatch _sw = new Stopwatch();
public void StartOrResumeGame() {
_sw.Start();
}
public void StopOrPauseGame() {
_sw.Stop();
_gameTimeMessage = String.Format("You have been playing for {0} seconds.", _sw.TotalSeconds);
}
Time
属性的定义是什么?例如,如果我使用另一个winform保存高分,我希望在此处显示时间。我想我看到了您想要的。你可能想创建你自己的TickEventArgs类,在那里你从EventArgs继承并添加你的时间属性,这样你就可以通过event传递信息。嗯,好吧,我是编程新手,还在学习,但我想我知道你的意思。但是我还是不知道如何从那里节省时间。你介意展示它的代码示例吗?在构造函数勾选中包含该值(这是新的TickEventArgs(Time))代码>。这不是必需的。您还可以在接收端强制转换sender
对象,并直接获得Time
属性。不过,使用秒表可能比使用整数要好。请参阅张贴的答案。秒表实际上比计时器感觉更好。但是什么是_gameTImeMessage?我假设您记录了游戏的播放时间,以便在游戏结束时向用户显示。假设\u gameTimeMessage
是屏幕上的消息或其他东西。好的,我想我现在已经成功了。但是我在格式上有点问题。“.TotalSeconds”不起作用,而我尝试过的其他选项我认为以毫秒为单位显示。你有什么窍门可以让我在几秒钟内把它写出来吗?当我使用“.TotalSeconds”时,我收到此错误消息“'System.Diagnostics.Stopwatch'不包含'TotalSeconds'的定义,并且找不到接受'System.Diagnostics.Stopwatch'类型的第一个参数的扩展方法'TotalSeconds'(是否缺少using指令或程序集引用?)”抱歉,这应该是\u sw.eassed.TotalSeconds
。尽管错误消息是不言自明的。你有没有试着去理解它的意思并自己解决这个问题?谢谢,现在我明白了!我是编程新手,还没有学会理解所有的错误信息。