110,537
社区成员
发帖
与我相关
我的任务
分享
private static readonly SemaphoreSlim slim = new SemaphoreSlim(1);
private async void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
await slim.WaitAsync();
Trace.WriteLine("准备进入新线程");
RegisterThread();
}
}
void RegisterThread()
{
Thread thread=new Thread(RegisterThread0);
thread.Start();
}
void RegisterThread0()
{
Thread.Sleep(TimeSpan.FromMinutes(1));
Trace.WriteLine("线程执行完毕,释放信号量");
slim.Release();
}
private void button2_Click(object sender, EventArgs e)
{
Trace.WriteLine("测试信号量是否阻止,主进程运行");
}
这是你现有代码直接加异步信号锁,看上去还是很讨厌。依旧诡异。而且因为需要异步,所以我还是用了await
下面我在贴,直接“未来时态”代码,你看是不是比这种诡异代码看着顺眼多了
for (int i = 0; i < visitorList.Count; i++)
{
Monitor.Enter(obj);
visitor_name = visitorList[i].f_name;
if (isRunNum == 0)
{
//定时器执行
idTimer.enable=true;
if (readIDCardCompleted)
{
WeiDunFingerTool wdTool = new WeiDunFingerTool();
wdTool.featureRegister = featureRegister;
wdTool.showMessage = ShowWndMessageMethod;
wdTool.setParam = SetParamMethod;
wdTool.setVisitorFingerInfo = setVisitorFingerInfoMethod;
wdTool.featureLen = featureLen;
if (!wdTool.OpenDevice())
{
this.rtbFinger.Text = "打开指静脉设备失败!";
return false;
}
if (0 != threadrunning)
{
this.rtbFinger.Text = "注册或验证线程运行中!";
return false;
}
threadrunning += 1;
//线程执行
wdTool.RegisterThread();
}
}