private void DealData() { while (true) { m_semaphoreData.WaitOne(); //阻塞当前线程,知道被其它线程唤醒 // 获取对data内存缓存的访问权 m_mutexListDatas.WaitOne(); List <HDModemDataStruct> dataListTmp = m_listDatas; m_listDatas = new List <HDModemDataStruct>(); //开辟一快新的缓存区 m_mutexListDatas.ReleaseMutex(); for (int i = 0; i < dataListTmp.Count; ++i) { try { HDModemDataStruct dat = dataListTmp[i]; string data = System.Text.Encoding.Default.GetString(dat.m_data_buf); string temp = data.Trim(); WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog"); Thread t = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile)); t.Start("GPRS: " + "长度:" + data.Length + " " + data + "\r\n"); if (temp.Contains("$")) { string[] dataList = temp.Split('$'); //数据解析 for (int j = 0; i < dataList.Length; j++) { if (dataList[j].Length < 20) { continue; } string dataGram = dataList[j].Substring(0, dataList[j].IndexOf(';')); CReportStruct report = new CReportStruct(); Protocol.Data.ZFXY.UpParse up = new Data.ZFXY.UpParse(); if (up.Parse(dataGram, out report)) { report.ChannelType = EChannelType.GPRS; report.ListenPort = this.GetListenPort().ToString(); if (this.UpDataReceived != null) { InvokeMessage(dataGram, "[GPRS]接收"); this.UpDataReceived.Invoke(null, new UpEventArgs() { Value = report, RawData = temp }); } } } } } catch (Exception e) { Debug.WriteLine("" + e.Message); } } } }
private void DealData() { while (true) { try { m_semephoreData.WaitOne(); Thread.Sleep(1000); string data = string.Empty; string rawdata = System.Text.Encoding.ASCII.GetString(m_inputBuffer.ToArray()); WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog"); Thread t = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile)); t.Start("GPRS: " + "长度:" + rawdata.Length + " " + rawdata + "\r\n"); //InvokeMessage(rawdata, "原始数据"); if (rawdata == null || rawdata == "") { continue; } if (!rawdata.EndsWith(";") && !rawdata.Contains(";") && !rawdata.Contains(";") && !rawdata.Contains(";")) { InvokeMessage("未包含结束符号", "输出"); continue; } m_inputBuffer.Clear(); string temp = rawdata.Trim(); string result = string.Empty; //InvokeMessage(temp, "原始数据"); //TODO 判定结束符 if (rawdata.Contains("$")) { data = rawdata; string[] dataList = data.Split('$'); //上行报文接收需回复TRU //数据解析 for (int i = 0; i < dataList.Count(); i++) { string oneGram = dataList[i]; CReportStruct report = new CReportStruct(); Protocol.Data.ZFXY.UpParse up1 = new Data.ZFXY.UpParse(); //UpPaser up = new UpPaser(); if (up1.Parse(oneGram, out report)) { report.ChannelType = EChannelType.Cable; report.ListenPort = "COM" + this.Port.PortName; if (this.UpDataReceived != null) { InvokeMessage(oneGram, "[CABLE]接收"); this.UpDataReceived.Invoke(null, new UpEventArgs() { Value = report, RawData = oneGram }); } } } } } catch (Exception exp) { Debug.WriteLine(exp.Message); m_inputBuffer.Clear(); //InvokeMessage(rawdata, "接收"); } }//end of while }