void _readDviInfo_CompleteRetryRefreshDviInfoEvent(object sender, CompleteRefreshSenderDviEventArgs e)
        {
            _fLogService.Info("读取DVI数据完成,开始解析...");
            SendStatusMsg("GetDVIDataFinish");
            #region 解析发送卡数据
            if (e.IsRefreshSuccess)
            {
                _allMonitorData.CurAllSenderStatusDic = GetWorkStatusList(e.StatusDic);
                _allMonitorData.CurAllSenderDVIDic = e.RefreshRateDic;
                _allMonitorData.RedundantStateType = e.RedundantState;
                _allMonitorData.TempRedundancyDict = new SerializableDictionary<string, List<SenderRedundancyInfo>>();
                foreach (KeyValuePair<string, List<SenderRedundancyInfo>> keyvalue in _reduInfoList)
                {
                    if (keyvalue.Value == null || keyvalue.Value.Count == 0)
                    {
                        _allMonitorData.TempRedundancyDict.Add(keyvalue.Key, null);
                    }
                    else
                    {
                        _allMonitorData.TempRedundancyDict.Add(keyvalue.Key, keyvalue.Value);
                    }
                }
                _allMonitorData.CommPortData = new SerializableDictionary<string, int>();
                EquipmentInfo equipInfo = null;
                int count = 0;
                foreach (string commPort in _serverProxy.EquipmentTable.Keys)
                {
                    equipInfo = _serverProxy.EquipmentTable[commPort];
                    if (equipInfo == null
                        || equipInfo.EquipTypeCount <= 0)
                    {
                        continue;
                    }
                    if (CustomTransform.IsSystemController(equipInfo.ModuleID))
                    {
                        count = CustomTransform.GetPortNumber(equipInfo.ModuleID);
                        _allMonitorData.CommPortData.Add(commPort, count);
                    }
                }

                //枚举每个使用到的串口
                foreach (string comName in _allComBaseInfo.AllInfoDict.Keys)
                {
                    OneCOMHWBaseInfo baseInfo = _allComBaseInfo.AllInfoDict[comName];
                    //枚举每个显示屏
                    for (int i = 0; i < baseInfo.LEDDisplayInfoList.Count; i++)
                    {
                        ILEDDisplayInfo displayInfo = baseInfo.LEDDisplayInfoList[i];
                        //获取显示屏用到的发送卡
                        List<ScreenSenderAddrInfo> scrSenderAddrList;
                        displayInfo.GetScreenSenderAddrInfo(out scrSenderAddrList);
                        //从所有硬件数据中找出当前显示屏的数据
                        ScreenModnitorData monitorData = FindScreenMonitorDataFromList(_allMonitorData.AllScreenMonitorCollection, GetScreenUdid(baseInfo.FirstSenderSN, i));

                        if (monitorData != null)
                        {
                            for (int j = 0; j < scrSenderAddrList.Count; j++)
                            {
                                #region 获取每个显示屏的每张发送卡的数据

                                int senderIndex = scrSenderAddrList[j].SenderIndex;
                                SenderMonitorInfo senderMInfo = new SenderMonitorInfo();
                                senderMInfo.DeviceStatus = DeviceWorkStatus.OK;

                                senderMInfo.DeviceRegInfo = new DeviceRegionInfo();
                                senderMInfo.DeviceRegInfo.CommPort = comName;
                                senderMInfo.DeviceRegInfo.SenderIndex = (byte)senderIndex;

                                #region 设置发送卡的路径
                                senderMInfo.MappingList = GetSenderSearchMapping(i, senderIndex);
                                #endregion

                                #region 设置发送卡DVI信息
                                if (e.RefreshRateDic.ContainsKey(comName))
                                {
                                    List<ValueInfo> senderRefInfo = e.RefreshRateDic[comName];
                                    if (senderIndex < senderRefInfo.Count)
                                    {
                                        senderMInfo.IsDviConnected = senderRefInfo[senderIndex].IsValid;
                                        senderMInfo.DviRate = (int)senderRefInfo[senderIndex].Value;
                                    }
                                    else
                                    {
                                        senderMInfo.DeviceStatus = DeviceWorkStatus.Error;
                                    }
                                }
                                else
                                {
                                    senderMInfo.DeviceStatus = DeviceWorkStatus.Error;
                                }
                                #endregion

                                #region 设置发送卡网口的状态(冗余)
                                if (e.RedundantState.ContainsKey(comName))
                                {
                                    Dictionary<int, SenderRedundantStateInfo> senderReduStateDict = e.RedundantState[comName];
                                    if (senderReduStateDict.ContainsKey(senderIndex))
                                    {
                                        SenderRedundantStateInfo senderReduInfo = senderReduStateDict[senderIndex];
                                        foreach (int portIndex in senderReduInfo.RedundantStateTypeList.Keys)
                                        {
                                            PortOfSenderMonitorInfo portOfSenderInfo = new PortOfSenderMonitorInfo();
                                            portOfSenderInfo.DeviceStatus = DeviceWorkStatus.OK;
                                            #region 设置网口的路径
                                            portOfSenderInfo.MappingList = GetPortOfSenderMapping(i, senderIndex, portIndex);

                                            #endregion
                                            if (senderReduInfo.RedundantStateTypeList[portIndex] == RedundantStateType.Error)
                                            {
                                                portOfSenderInfo.IsReduState = true;
                                            }
                                            else
                                            {
                                                portOfSenderInfo.IsReduState = false;
                                            }

                                            senderMInfo.ReduPortIndexCollection.Add(portOfSenderInfo);
                                        }
                                    }
                                }
                                #endregion
                                #endregion

                                monitorData.SenderMonitorCollection.Add(senderMInfo);
                            }
                        }
                    }
                }
            }
            SendStatusMsg("ParsingDVIDataFinish");
            NotifyCompleteAllMonitor();
            #endregion
        }
 public object Clone()
 {
     PortOfSenderMonitorInfo data = new PortOfSenderMonitorInfo();
     if (!this.CopyTo(data))
     {
         return null;
     }
     return data;
 }