C#倒数计时器暂停
c# countdown timer pause
我一直在尝试在 c# winforms 应用程序中创建一个倒数计时器(从 30 分钟开始),它能够暂停,然后从暂停发生的地方恢复。我已经尝试了多种解决方案来实现这一点,因为我知道 System.Windows.Forms.Timer 没有特定的暂停功能。我已经搜索了互联网,但找不到任何可以应用于我的场景的东西。我尝试过的所有方法要么导致计时器从 30 分钟重新开始,要么从它本来应该没有暂停的地方继续。这让我发疯。任何人都可以帮助或建议这样做的替代方法吗?这是我第一次 post 在这里,如果有任何错误,我深表歉意。下面的代码。我已经注释掉了导致我出现问题的代码 - 我知道它在语法上或逻辑上都不正确。
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;
}
}
}
我猜你想让计时器在它暂停时的位置继续运行。
为此,我建议使用 stopTime
:
在您的 "Pause-Unpause"- 例程中:
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;
}
}
我一直在尝试在 c# winforms 应用程序中创建一个倒数计时器(从 30 分钟开始),它能够暂停,然后从暂停发生的地方恢复。我已经尝试了多种解决方案来实现这一点,因为我知道 System.Windows.Forms.Timer 没有特定的暂停功能。我已经搜索了互联网,但找不到任何可以应用于我的场景的东西。我尝试过的所有方法要么导致计时器从 30 分钟重新开始,要么从它本来应该没有暂停的地方继续。这让我发疯。任何人都可以帮助或建议这样做的替代方法吗?这是我第一次 post 在这里,如果有任何错误,我深表歉意。下面的代码。我已经注释掉了导致我出现问题的代码 - 我知道它在语法上或逻辑上都不正确。
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;
}
}
}
我猜你想让计时器在它暂停时的位置继续运行。
为此,我建议使用 stopTime
:
在您的 "Pause-Unpause"- 例程中:
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;
}
}