【问题标题】:c# countdown timer pausec# 倒计时暂停
【发布时间】:2017-03-13 20:50:43
【问题描述】:

我一直在尝试在具有暂停功能的 c# winforms 应用程序中创建一个倒数计时器(从 30 分钟开始),然后从暂停的位置恢复。我已经尝试了许多解决方案来实现这一点,因为我知道 System.Windows.Forms.Timer 没有特定的暂停功能。我已经搜索了互联网,但找不到任何可以应用于我的场景的东西。我尝试过的一切要么导致计时器从 30 分钟重新开始,要么从原本应该没有暂停的地方继续。这让我发疯。任何人都可以帮助或建议另一种方法吗?这是我在这里的第一篇文章,如果我犯了任何错误,我们深表歉意。代码如下。我已经注释掉了导致我出现问题的代码 - 我知道它在语法或逻辑上都不正确。

public partial class FormWithTimer : Form
{
    System.Windows.Forms.Timer timerx = new System.Windows.Forms.Timer();

    DateTime startTime = DateTime.Now;
    DateTime stopTime = DateTime.Now;

    public FormWithTimer()
    {
        InitializeComponent();
        TimerLabel.Text = "30:00";
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    void timer_Tick(object sender, EventArgs e)
    {

    }

    public void StartButton_Click(object sender, EventArgs e)
    {
        startTime = DateTime.Now;

        BeginTextBox.Text = startTime.ToString();


        TimerLabel.Visible = true;
        timerx.Tick += (obj, args) =>
            TimerLabel.Text = (TimeSpan.FromMinutes(30) - (DateTime.Now - startTime)).ToString("mm\\:ss");

        timerx.Enabled = true;

    }

    public void PauseButton_Click(object sender, EventArgs e)
    {

        if (PauseButton.Text == "Pause")
        {
            timerx.Stop();
            PauseButton.Text = "Start";
            stopTime = DateTime.Now;
        }
        else
        {
            PauseButton.Text = "Pause";

            timerx.Start();
            TimerLabel.Visible = true;
            //timerx.Tick += (obj, args) =>
            //    TimerLabel.Text = (TimeSpan.FromMinutes(30) - (DateTime.Now - (startTime - stopTime))).ToString("mm\\:ss");

            timerx.Enabled = true;
        }

    }

}

【问题讨论】:

  • 为什么要暂停计时器?如果您在 10 分钟处暂停,那么当您恢复时,您希望在 20 分钟后先暂停?
  • 那么,添加另一个名为DateTime pauseStart的变量有什么问题,当用户取消暂停计时器时,将差异添加到startTime
  • 你是如何“取消暂停”它的 - 如果你使用的是 StartButton_Click,而 startTime 设置为单击按钮时的设置

标签: c# timer countdown


【解决方案1】:

我猜你正试图让计时器在暂停时继续。

为此,我建议使用stopTime

在您的“暂停-取消暂停”- 例程中:

public void PauseButton_Click(object sender, EventArgs e)
{

    if (PauseButton.Text == "Pause")
    {
        timerx.Stop();
        PauseButton.Text = "Start";
        stopTime = DateTime.Now;
    }
    else
    {
        PauseButton.Text = "Pause";
        startTime += (DateTime.Now - stopTime);

        timerx.Start();
        TimerLabel.Visible = true;

        timerx.Enabled = true;
    }

}

【讨论】:

  • 完美!这正是我所追求的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多