显示时间已过

时间:2016-07-17 11:13:07

标签: c# .net winforms timer

我需要动态显示经过的时间。我的代码会根据间隔值弹出一条消息。

file_get_contents

如果我在我的间隔中定义了15分钟,我如何在标签中显示倒计时?

3 个答案:

答案 0 :(得分:4)

您应该将结束时间存储在表单级别的字段中,然后在计时器的Tick事件处理程序中检查结束时间和现在之间的差异,并更新要显示倒计时的标签定时器:

private DateTime endTime;
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
private void button1_Click(object sender, EventArgs e)
{
    var minutes = 0;
    if (int.TryParse(textBox1.Text, out minutes) && timer.Enabled == false)
    {
        endTime = DateTime.Now.AddMinutes(minutes);
        timer.Interval = 1000;
        timer.Tick -= new EventHandler(timer_Tick);
        timer.Tick += new EventHandler(timer_Tick);
        timer.Start();
        UpdateText();
    }
}
void timer_Tick(object sender, EventArgs e)
{
    UpdateText();
}
void UpdateText()
{
    var diff = endTime.Subtract(DateTime.Now);
    if (diff.TotalSeconds > 0)
        label1.Text = string.Format("{0:D2}:{1:D2}:{2:D2}",
                                   diff.Hours, diff.Minutes, diff.Seconds);
    else
    {
        this.Text = "00:00:00";
        timer.Enabled = false;
    }
}

答案 1 :(得分:0)

我不会和计时器混在一起。我为此使用了Microsoft的Reactive Framework。只是NuGet" Rx-Winforms"获得位。然后你可以这样做:

Observable
    .Create<string>(o =>
    {
        var now = DateTimeOffset.Now;
        var end = now.AddMinutes(15.0);
        return
            Observable
                .Interval(TimeSpan.FromSeconds(0.1))
                .TakeUntil(end)
                .Select(x => end.Subtract(DateTimeOffset.Now).ToString(@"mm\:ss"))
                .DistinctUntilChanged()
                .Subscribe(o);
    })
    .ObserveOn(this)
    .Subscribe(x => label1.Text = x);

这将自动创建倒数计时器,该计时器将使用以下值更新label1中的文字:

14:59 
14:58 
14:57 
14:56 
14:55 
14:54 
...
00:02
00:01
00:00

如果您想在计时器用完之前停止此操作,Subscribe方法会返回IDisposable,您只需拨打.Dispose()

答案 2 :(得分:-2)

你应该试着计算15分钟。 例如,如果您使用Label(Label1),则应使用计时器对其进行计数。 只需使用计时器并计算每个滴答(1000毫秒)+1

Timer1 has a +1 (declare a int as 0)
If the label reaches the number of seconds or minutes
(You can modify that with milliseconds), it stops the timer.