Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/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# Visual Studio 2015 c计时器问题_C#_Winforms_Timer - Fatal编程技术网

C# Visual Studio 2015 c计时器问题

C# Visual Studio 2015 c计时器问题,c#,winforms,timer,C#,Winforms,Timer,嘿,我想知道是否有人能帮我解决我在windows窗体应用程序中遇到的计时器问题。以下是我正在使用的代码: private void game_Timer_Tick(object sender, EventArgs e) { while (true) { int count = 0; count++; timeLabel.Text = TimeSpan.FromSeconds(count

嘿,我想知道是否有人能帮我解决我在windows窗体应用程序中遇到的计时器问题。以下是我正在使用的代码:

private void game_Timer_Tick(object sender, EventArgs e)
    {
        while (true)
        {
            int count = 0;
            count++;
            timeLabel.Text = TimeSpan.FromSeconds(count).ToString();
        }
    }

我遇到的问题是,每当这个应用的窗口打开之后,什么都没有发生,我什么都做不了。当删除此代码时,窗口工作正常,因此我不确定为什么它与此部分代码不相关。有什么想法吗?谢谢

如果要显示计时器启动后的秒数,请声明保存启动时间的字段:

private DateTime startTime;
启动计时器时分配此字段:

game_Timer.Interval = 1000; // fire event each second
startTime = DateTime.Now;
game_Timer.Start();
并在Tick handler中使用它:

private void game_Timer_Tick(object sender, EventArgs e)
{
    timeLabel.Text = (DateTime.Now - startTime).ToString();
}
你的代码有什么问题?在Tick事件处理程序中有无限循环。所以,当事件第一次触发时,您将进入此循环,而不会退出它。您无法做任何事情,因为您的应用程序忙于不断更新时间标签

您也可以使用计数器代替保存计时器启动时间。但无论如何,您都需要字段:

private int count = 0;
和事件处理程序:

private void game_Timer_Tick(object sender, EventArgs e)
{
    timeLabel.Text = TimeSpan.FromSeconds(++count).ToString();
}

游戏计时器滴答声应该在每个计时器间隔自动触发,你不应该在里面做你自己的循环。在应用程序没有时间实际显示标签更新时删除。