1. 程式人生 > >第一次線程使用經驗總結

第一次線程使用經驗總結

修改 datetime pes reac 時間 con format 獲取數據 ice

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);
}

}

第一次線程使用經驗總結