//委托实现 public void CallBackHandle(LoadDll.MhMsg m) { //压入队列先进先出 byte[] ret = StringUtil.GetPtrData((IntPtr)m.addr, m.len); m.body = ret; mhMsgQue.Add(m); }
/// <summary> /// 回复消息处理 /// </summary> /// <param name="m"></param> public void recvMsgHandle(LoadDll.MhMsg m) { //来源窗口 IntPtr formWind = (IntPtr)m.hwnd; //0收,1发 int type = m.type; //取出数据长度大小 int size = m.body.Length; byte[] data = m.body; //判断数据包是否显示 bool ret = true; if (cbxFilert.Checked) { ret = FilertMsgData(data, type); } //处理回应的包 mh_excute[formWind].switchExecute(type, data); model.MhxyLog ml = new model.MhxyLog(type, data); //判断是否入库保存 if (saveDB) { //判断是否需要过滤 if (cbx_db_filert.Checked == true && ret == false) { return; } ml.Save(Global.save_table); } //判断已知分类是否开启,开启后指显示已知分类 if (cbxShowType.Checked && type != 1) { if (mapFilert.ContainsKey(data[0]) == false) { return; } } if (!ret) { return; } //判断是否只显示当前 if (cbx_current.Checked == true) { if (formWind.ToInt32() != current_mh.ToInt32()) { return; } } //判断是否只显示发包 if (cbx_recv.Checked && type == 0) { return; } if (revStatus) { ListViewItem lt = new ListViewItem(); //将数据库数据转变成ListView类型的一行数据 lt.Text = (lv_pkg.Items.Count + 1).ToString(); lt.SubItems.Add(data.Length.ToString()); if (type == 0) { lt.SubItems.Add("收"); } if (type == 1) { lt.SubItems.Add("发"); } if (type == 2) { lt.SubItems.Add("替"); } lt.SubItems.Add(mhxy.Common.GetMHName(formWind.ToInt32())); lt.SubItems.Add(StringUtil.FormatHexStyle(StringUtil.byteToHexStr(data))); //将lt数据添加到listView1控件中 lv_pkg.Items.Add(lt); lv_pkg.EnsureVisible(lv_pkg.Items.Count - 1); } }