C# 在标签中显示暂停的计时器值

C# 在标签中显示暂停的计时器值,c#,winforms,timer,C#,Winforms,Timer,我创建了一个C#windows窗体应用程序,它使用计时器每5分钟清除一次输入框。有一个名为lblTime的标签,显示应用程序打开时在任何给定点经过的时间量。 我希望能够通过单击按钮禁用或暂停计时器(Clock.Enabled=false),并使lblTime停留在单击按钮时经过的时间量上。但是,由于elapsedTime变量的计算方式(DateTime.Now-startTime),即使在禁用计时器后,该值仍会继续更改 总而言之: lblTime将运行时间显示为时钟滴答声 可以通过单击按钮禁用时

我创建了一个C#windows窗体应用程序,它使用计时器每5分钟清除一次输入框。有一个名为lblTime的标签,显示应用程序打开时在任何给定点经过的时间量。 我希望能够通过单击按钮禁用或暂停计时器(Clock.Enabled=false),并使lblTime停留在单击按钮时经过的时间量上。但是,由于elapsedTime变量的计算方式(DateTime.Now-startTime),即使在禁用计时器后,该值仍会继续更改

总而言之: lblTime将运行时间显示为时钟滴答声 可以通过单击按钮禁用时钟,但lblTime将继续递增 lblTime需要在禁用时钟的同一按钮上的当前值上停止,然后能够从该值再次开始计数

显示启动时钟、初始化和更新lblTime的代码

如果有任何帮助,我们将不胜感激, 谢谢 标记


更改使用倒计时时间的方法。使用时间跨度数据类型。将变量初始化为5分钟
New TimeSpan(0,5,0)
并使用它,而不是开始时间和现在()。

使用
bool
标志和
TimeSpan
以及秒计数器,直到下一次清除:

DateTime startTime = DateTime.Now;
TimeSpan elapsed = new TimeSpan(0);
bool running = true;
int clearInSeconds = 300;

private void Clock_Tick(object sender, EventArgs e)
{
    // function one: count elapsed running time
    if (running) elapsed = elapsed.Add(new TimeSpan(0, 0, 1));
    lblTime.Text = startTime.Add(elapsed).ToLongTimeString();
    // function two: clear stuff after interval:
    if (clearInSeconds-- <= 0)
    {
        clearInSeconds = 300;
        // clear your stuff now
    }
}
DateTime startTime = DateTime.Now;
TimeSpan elapsed = new TimeSpan(0);
bool running = true;
int clearInSeconds = 300;

private void Clock_Tick(object sender, EventArgs e)
{
    // function one: count elapsed running time
    if (running) elapsed = elapsed.Add(new TimeSpan(0, 0, 1));
    lblTime.Text = startTime.Add(elapsed).ToLongTimeString();
    // function two: clear stuff after interval:
    if (clearInSeconds-- <= 0)
    {
        clearInSeconds = 300;
        // clear your stuff now
    }
}
private void lblTime_Click(object sender, EventArgs e)
{
    running = !running;
}