先大致写下代码
for (int i = 0; i < list.Count; i++) // 循環啟動線程 { DeviceClass dc = (DeviceClass)list[i]; sendthread[i] = new Thread(new ThreadStart(dc.SendMessage)); // 調用設備管理類(DeviceManager)發送短信方法 sendthread[i].IsBackground = true; sendthread[i].Start(); }
下面是sendmessage方法
public void SendMessage() { while(true) { if (IsReged()) { ........ } Thread.Sleep(5000);
} }
下面IsReged方法
private bool IsReged() { #region 是否注册 bool regFlag = true; try { Reg reg = new Reg(); if (!reg.state) { if (degree < 10) { reg.degree = degree; reg.Save(); } else { SmsLogger.GetLogger().AppendLog("ERROR", "對不起,您的系統還沒有注冊,只能試用10次,請立即注冊"); regFlag = false; } } return regFlag; } catch (Exception ex) { SmsLogger.GetLogger().AppendLog("ERROR ", "對不起,驗證註冊信息失敗!" + ex.Message); return false; }
程序要求:只能有一个线程进入IsReged方法,当某个线程在执行IsReged方法,其他线程等待,求各位大侠帮忙修改下,谢谢
使用manualresetevent来通过设置信号量进行
如果阻塞,请使用 reset方法,释放请使用set方法 在其他的方法中使用waitone方法,这个是在IsReged()方法内部使用
还有一个就是使用Lock, 进入IsReged后,Lock一个未声明变量即可。
能否说的详细点,不明白
@冰封一夏: manualresetevent http://www.codeproject.com/Articles/2042/Using-events-for-thread-synchronization