c#定时器 防重入锁
2026/9/20 22:58:32 网站建设 项目流程

private int data1 = 0;
int Step1 = 0; //标志位
int status2 = 0; //标志位
private async void timer1_Tick(object sender, EventArgs e)
{
if (status2 == 1) return; // 忙就不进
status2 = 1; // ✅ 立刻上锁(关键)

try { switch (Step1) { case 0: textBoxStart.Text = "开始"; Step1 = 10; break; case 10: textBoxStart.Text = "步序是10"; Step1 = 20; break; case 20: textBoxStart.Text = "步骤20"; Step1 = 30; // ✅ 先推进步序 await Task.Delay(3000); // ✅ 延时才稳定 break; case 30: textBoxStart.Text = "步骤30"; Step1 = 40; break; case 40: textBoxStart.Text = "步骤40"; timer1.Enabled = false; // ✅ 结束就停(否则会一直刷40) break; } } catch (Exception ex) { timer1.Enabled = false; textBoxStart.Text = "异常:" + ex.Message; Step1 = 0; } finally { status2 = 0; // ✅ 解锁 }

}

//------------备注-------------------
1️⃣ Step 一定要在 await 前推进
2️⃣ 锁只保证“单次 Tick 不重入”,不是保证整个 Delay 期间

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询