【问题标题】:C# Creating a Timer that at a specific values changes a labelC# 创建一个在特定值处更改标签的计时器
【发布时间】:2012-11-22 19:27:45
【问题描述】:

我是 C# 新手,我已经搜索过但没有找到解决问题的简单方法。 我正在创建一个 Windows 窗体应用程序。 单击开始按钮后,它会每毫秒计数一次,当它从数组中达到特定值时会更改标签。 毫秒是怎么计算的?

--------------

AlekZanDer 代码:

            namespace timer_simple3
    {
        public partial class Form1 : Form
{
    long result = 0;
    public Form1()
    {
        InitializeComponent();
        this.timer1 = new System.Windows.Forms.Timer(this.components);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
    }

    private void timer1_Tick(object sender, EventArgs e)
    {

         result = result + 1;
        label1.Text = Convert.ToString(result);

    }

    private void btstart_Click(object sender, EventArgs e)
    {
        timer1.Interval = 1; //you can also set this in the
        //properties tab
        timer1.Enabled = true;
        timer1.Start();
       // label1.Text = Convert.ToString(timer1);
    }

    private void btstop_Click(object sender, EventArgs e)
    {
        timer1.Stop();
    }
}
    }

【问题讨论】:

  • 一年后。这个故事还在继续……有什么问题?
  • 大量研究,但我敢打赌,你不需要 2 页,满是复杂的代码行。
  • 至少发布一些您尝试过的代码,以便我们可以帮助您解决您面临的具体问题

标签: c# time timer counter elapsed


【解决方案1】:

如何计算毫秒数?

您不能这样做,因为Windows Forms Timer component 是单线程的,并且精度限制在 55 毫秒。如果您需要更准确的多线程计时器,请使用 System.Timers 命名空间中的 Timer 类。

此外,任何其他计时器都不会为您提供超过 16 毫秒(实际上是 15.625 毫秒,或 64Hz)的准确度。所以,你不能增加一些计数器来计算经过的毫秒数。

您的选项 - 而不是 long result 计数器使用当前时间和计时器开始时间之间的差异:

label1.Text = (DateTime.Now - startDateTime).Milliseconds.ToString();

【讨论】:

【解决方案2】:

首先,您必须创建一个方法,告诉计时器每隔 [将所需数字放在这里] 毫秒做什么。

private void randomTimer_Tick(object sender, EventArgs e)
{
    if (conditions)
    {
        ... //stuff to do
        ... //more stuff to do
        ... //even more stuff to do
    } 
}

然后你设置定时器调用这个方法:你可以通过使用定时器属性的事件选项卡来做到这一点或写:

this.randomTimer1.Tick += new System.EventHandler(this.randomTimer1_Tick);

private void InitializeComponent(){} 方法的 ProjectName.Designer.cs 文件中 this.randomTimer = new System.Windows.Forms.Timer(this.components); 行之后。

最后你启用计时器:

private void startButton (object sender, EventArgs e)
{
    randomTimer.Interval = timeInMilliseconds; //you can also set this in the
                                               //properties tab
    randomTimer.Enabled = true;
}

当然,你也必须设置按钮来调用这个方法。

如果您不知道“属性”窗口在哪里(我假设您使用的是 Visual C#):它通常是位于窗口右侧的选项卡。为了在选项卡中显示某些内容,您必须在设计视图中选择要编辑的表单。如果编译器窗口的任何地方都没有这样的选项卡,请转到“查看”->“其他窗口”并选择“属性窗口”。

如果您找到的答案又长又复杂,那主要是因为他们用细节和例子来解释整个过程。如果您使用 Visual C# 的“拖放”选项,表单的声明代码将自动发生,然后由您编写方法的代码。还有其他一些不言自明的功能,使编程更愉快。使用它们!

【讨论】:

  • 结果不是毫秒
  • 我不明白你的意思。
  • 滴答声应该每毫秒发生一次?如果是,则没有发生
  • 没有。每次调用该方法之间的时间间隔可以任意长。
  • 如何做到1毫秒?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
相关资源
最近更新 更多