第一次線程使用經驗總結
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);
}
}
第一次線程使用經驗總結