//第一种方法:获取系统时间,计算时间差来比较延时时间是否到达
enum ProcessStep
{
Step1,
Wait2Seconds,
Step3,
Finished
}
public partial class Form1 : Form
{
private ProcessStep _currentStep = ProcessStep.Step1;
private DateTime _waitStartTime; // 记录开始等待的时间
public Form1()
{
InitializeComponent();
timer1.Interval = 1000; // 1 秒 tick 一次
timer1.Tick += timer1_Tick;
}
private void btnStart_Click(object sender, EventArgs e)
{
_currentStep = ProcessStep.Step1;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
switch (_currentStep)
{
case ProcessStep.Step1:
// 做完步骤1后,要等待2秒再进入步骤3
lblStatus.Text = "步骤1完成,开始等待2秒...";
_waitStartTime = DateTime.Now; // 记录开始等待时间
_currentStep = ProcessStep.Wait2Seconds; // 切到"等待步骤"
break;
case ProcessStep.Wait2Seconds:
// 每次 Tick 检查是否已经过去了 2 秒
if ((DateTime.Now - _waitStartTime).TotalSeconds >= 2)
{
lblStatus.Text = "已经等待2秒,进入步骤3";
_currentStep = ProcessStep.Step3;
}
else
{
lblStatus.Text = "还没到2秒,继续等待...";
}
break;
case ProcessStep.Step3:
lblStatus.Text = "步骤3:执行实际操作...";
// TODO: 执行步骤3的逻辑
_currentStep = ProcessStep.Finished;
break;
case ProcessStep.Finished:
lblStatus.Text = "流程结束";
timer1.Stop();
break;
}
}
}
这里 Timer 间隔是 1 秒,但你要等 2 秒:
第一次 Tick:进入 Wait2Seconds,记录时间;
第二次 Tick:可能刚刚 1 秒,还没到 2 秒 ⇒ 继续等待;
第三次 Tick:总共大约 2 秒 ⇒ 进入下一步。
不阻塞 UI,界面不会卡。
//第二种方法:获取系统时间,计数来比较延时时间是否到达

enum ProcessStep
{
Step1,
Wait2Seconds,
Step3,
Finished
}
public partial class Form1 : Form
{
private ProcessStep _currentStep = ProcessStep.Step1;
private int _waitTicksRemaining = 0; // 还需要等待的 Tick 次数
public Form1()
{
InitializeComponent();
timer1.Interval = 1000; // 1秒
timer1.Tick += timer1_Tick;
}
private void btnStart_Click(object sender, EventArgs e)
{
_currentStep = ProcessStep.Step1;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
switch (_currentStep)
{
case ProcessStep.Step1:
lblStatus.Text = "步骤1完成,接下来等待2秒...";
_waitTicksRemaining = 2; // 需要等2次 Tick
_currentStep = ProcessStep.Wait2Seconds;
break;
case ProcessStep.Wait2Seconds:
if (_waitTicksRemaining > 0)
{
_waitTicksRemaining--;
lblStatus.Text = $"等待中,还剩 {_waitTicksRemaining} 秒...";
}
if (_waitTicksRemaining <= 0)
{
lblStatus.Text = "已经等待2秒,进入步骤3";
_currentStep = ProcessStep.Step3;
}
break;
case ProcessStep.Step3:
lblStatus.Text = "步骤3:执行操作...";
// TODO: 实际处理
_currentStep = ProcessStep.Finished;
break;
case ProcessStep.Finished:
lblStatus.Text = "流程结束";
timer1.Stop();
break;
}
}
}

