Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保存特定的计时器刻度_C#_Winforms_Timer - Fatal编程技术网

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

我正在用Winforms(c#)创建一个游戏,我制作了一个计时器来跟踪正在进行的时间,当游戏停止时计时器停止。但我还没有成功地节省计时器显示的游戏停止并发布的时间

这就是我如何建立定时器功能

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
。尽管错误消息是不言自明的。你有没有试着去理解它的意思并自己解决这个问题?谢谢,现在我明白了!我是编程新手,还没有学会理解所有的错误信息。