/// <summary> /// 添加消息/数据到队列中 /// </summary> /// <param name="sender">消息发出者</param> /// <param name="e">消息参数</param> public void AddMsg(object sender, object e) { //if (GlobalUnit.g_CUS.DnbData.CheckState == Cus_CheckStaute.停止检定) // return; try { CLDC_DataCore.Struct.StRealTimeMsg _Msg = new CLDC_DataCore.Struct.StRealTimeMsg(); _Msg.objSender = sender; //移除已经过期的消息 while (lstMsg.Count > MaxItem) { CLDC_DataCore.Struct.StRealTimeMsg m = lstMsg.Dequeue(); } _Msg.cmdData = (CLDC_CTNProtocol.CTNPCommand)e; lstMsg.Enqueue(_Msg); } catch (Exception ex) { if (!(ex is ThreadAbortException)) { string logPath = "/Log/Thread/MsgThread-" + DateTime.Now.ToString("yyyy-MM-dd") + ".log"; CLDC_DataCore.Const.GlobalUnit.Log.WriteLog(logPath, this, "AddMsg", ex.Message + "\r\n" + ex.StackTrace); } #if DEBUG throw ex; #endif } }
/// <summary> /// 消息处理线程,确保只有一个线程调用 /// </summary> public void DoWork() { if (CLDC_DataCore.Const.GlobalUnit.IsDemo) { return; } while (true) { if (CLDC_DataCore.Const.GlobalUnit.ApplicationIsOver) { break; } if (lstMsg.Count > 0) { try { CLDC_DataCore.Struct.StRealTimeMsg _Msg = lstMsg.Dequeue(); if (UpdateRealTimeMsg != null) { //数据队列处理 UpdateRealTimeMsg(_Msg.objSender, _Msg.cmdData); } } catch (InvalidOperationException e) { e.ToString(); //消息队列为空时的意外处理. } catch (Exception ex) { string logPath = "/Log/Thread/MsgThread-" + DateTime.Now.ToString("yyyy-MM-dd") + ".log"; CLDC_DataCore.Const.GlobalUnit.Log.WriteLog(logPath, this, "DoWork", ex.Message + "\r\n" + ex.StackTrace); } } Thread.Sleep(SleepTime); } string logThreadPath = "/Log/Thread/MsgThreadInfo.log"; CLDC_DataCore.Const.GlobalUnit.Log.WriteLog(logThreadPath, this, "DoWork", Thread.CurrentThread.Name + "退出"); }