1.线程声明。
2. 线程使用lamda表达式。
3.使用客户端的全局变量。static的可以修改。
4.页面移除时会触发一个closed事件。从此事件中修改全局变量。
5.使得线程内的工作不再发生,只是处理完现在的线程的工作。
6.线程内方法传入bool型变量,相对于此方法,就是全局变量了。
7.通过控制此方法传入的变量,控制是否可以再执行获取数据,因为在处理循环的时候可能时间比较 长,要求是只有处理完了才能添加工作。
8.线程使用 后台线程,页面完成时,线程自己处理完工作也要销毁。
9.真的全局变量,是根据cloed进行处理的,所以当closed事件发生时,把全局变量修改后,方法中的循环直接跳出,不在执行后续任务。
线程也会相应的销毁了。
System.Threading.Thread thread = new System.Threading.Thread(() =>
{
while (Constant.IsSpeakerText) { if (!this.ContainsFocus) { flag = true; Gdky.Manage.Measurement.M_ThreadEx.MeasurementAlarmSpeaker(ref flag); } else { flag = false; } System.Threading.Thread.Sleep(20 * 1000); }});
thread.IsBackground = true; thread.Start();
public static void MeasurementAlarmSpeaker(ref bool flag)
{ try { if (flag == true) { DataSet ds = M_ServiceObj.M_AlarmVoice_GetData(Constant.PwdCode, "", ref strError); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { flag = false; DataTable dt = ds.Tables[0]; foreach (DataRow dr in dt.Rows) { string Message = string.Format("{0}计量间在{1}发生{2}", dr["Name"].ToString(), DateTime.Parse(dr["AlarmTime"].ToString()).ToString("yyyy-MM-dd HH:mm:ss"), dr["AlamTypeStr"].ToString()); SpeakHelper.Read(Message); if (!Constant.IsSpeakerText) break;}
flag = true;}
}}
catch (Exception ex) { Gdky.Windows.Helper.LogHelper.WriteLog(ex); }}