private void Work(CaseGroup caseGroup)
        {
            string result = "";

            try
            {
                CaseFileData data = null;
                try
                {
                    data = LoadCaseData(caseGroup.FileName, caseGroup.FunList);
                }
                catch (Exception e)
                {
                    LogHelper.Logger.Error("发现文件格式错误", e);
                    return;
                }

                data.ID        = caseGroup.ID;
                data.UpStage   = caseGroup.UpStage;
                data.DownStage = caseGroup.DownStage;
                caseList.Add(data);

                if (caseGroup.LoopCount == 0)   //发送次数为0时,无限循环
                {
                    while (IsWork)
                    {
                        SendFastMsgReq(data, out result);
                        if (result == "error")
                        {
                            return;
                        }
                    }
                }
                else
                {
                    for (int i = 1; i < caseGroup.LoopCount; i++)
                    {
                        if (!IsWork)
                        {
                            return;
                        }

                        SendFastMsgReq(data, out result);
                        if (result == "error")
                        {
                            return;
                        }
                    }
                    StartEnable = true;
                }
            }
            catch (Exception error)
            {
                this.Dispatcher.Invoke(() => { MessageBox.Show($"{error.Message} \r\n {error.StackTrace}"); });
            }
        }
        /// <summary>
        /// 发送压力测试的请求包
        /// </summary>
        /// <param name="file"></param>
        /// <param name="result"></param>
        private void SendFastMsgReq(CaseFileData file, out string result)
        {
            try
            {
                foreach (CaseFunction funitem in file.Functions)
                {
                    int nSendTimes = 0;

                    do
                    {
                        bool bNeedWait = (file.SendCount - file.RecCount) >= file.UpStage;
                        if (bNeedWait)
                        {
                            file.ResetEvent.Reset();
                            if (!file.ResetEvent.WaitOne(10000))
                            {
                                file.SendCount = file.RecCount;
                                //每秒钟判断一次是否达到积压上限
                                continue;
                            }
                        }

                        nSendTimes++;
                        #region 发送包
                        LDsdkDefineEx.LDFastMessageAdapter fastmsg = new LDFastMessageAdapter(funitem.FunID, funitem.FunType);
                        //读取储存默认值的Excel文档,给未复制的参数赋予默认值
                        foreach (var filedItem in funitem.Fileds)
                        {
                            string FiledValue = filedItem.FiledValue;
                            int    filedType  = filedItem.FiledType;
                            string filedName  = filedItem.FiledName;

                            FiledValue = GetParamValue(funitem, filedItem);
                            //如果获取参数值失败,直接退出
                            if (FiledValue == "error")
                            {
                                result = "error";
                                return;
                            }

                            if (string.IsNullOrEmpty(FiledValue))
                            { //没有默认值,取默认值
                                if (!filedItem.HaveDefaultValue)
                                {
                                    FiledValue                 = GetDefaultValue(filedItem.FiledName, FiledValue);
                                    filedItem.DefaultValue     = FiledValue;
                                    filedItem.HaveDefaultValue = true;
                                }
                                FiledValue = filedItem.DefaultValue;
                            }
                            UtilTool.SetFastMsgValueById(fastmsg, filedType, FiledValue, filedItem.FiledTag);
                        }
                        int sendId = Interlocked.Increment(ref LastSendId);
                        fastmsg.SetInt32(LDBizTagDefine.LDSdkTag.LDTAG_PACKETID, sendId);
                        //赋值完毕,异步发送数据包
                        lock (ReqLock)
                        {
                            ReqAllList.Add(new ReqDTO()
                            {
                                SendID = sendId, CaseData = file
                            });
                        }


                        int nRet = (int)ConnectionManager.Instance.CurConnection.Connect.AsyncSend(funitem.FunID, fastmsg, 5000);
                        if (nRet > 0)
                        {
                            Interlocked.Increment(ref file.SendCount);
                            Interlocked.Increment(ref file.SendOkCount);
                        }
                        else
                        {
                            Interlocked.Increment(ref file.SendFailCount);
                        }
                        fastmsg.FreeMsg();
                        #endregion
                    }while (funitem.SendTimes > nSendTimes);
                }
                result = "OK";
            }
            catch (Exception error)
            {
                this.Dispatcher.Invoke(() => { MessageBox.Show($"{error.Message} \r\n {error.StackTrace}"); });
                result = "error";
            }
        }
        /// <summary>
        /// 加载案例数据
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="funList"></param>
        /// <returns></returns>
        public CaseFileData LoadCaseData(String filePath, List <CaseFunction> funList)
        {
            CaseFileData datas = new CaseFileData();

            try
            {
                if (!File.Exists(filePath))
                {
                    return(datas);
                }
                datas.FilePath = @filePath;
                XElement rootXML = XDocument.Load(filePath).Element("bizmsgs");
                var      funsXml = rootXML.Elements("function");
                foreach (var item in funsXml)
                {
                    string functionid = item.Attribute("functionid").Value;
                    string packettype = item.Attribute("packettype").Value;
                    var    CheckFun   = funList.FirstOrDefault(o => o.Check == 1 && o.FunID == functionid);
                    if (packettype.Equals("0") && CheckFun != null)
                    {
                        string       functionname = item.Attribute("functionname").Value;
                        CaseFunction fun          = new CaseFunction()
                        {
                            FunID   = functionid,
                            FunType = 0,
                            Check   = 1,
                            FunName = functionname
                        };
                        //发送次数
                        if (item.Attribute("times") != null)
                        {
                            string sendTimes  = item.Attribute("times").Value;
                            int    nSendTimes = 1;
                            int.TryParse(sendTimes, out nSendTimes);
                            fun.SendTimes = nSendTimes;
                        }
                        datas.Functions.Add(fun);
                        var filedsXml = item.Elements("field");

                        LDsdkDefineEx.LDFastMessageAdapter fastmsg = new LDFastMessageAdapter(functionid, 0);
                        LDRecordAdapter lpRecord = fastmsg.GetBizBodyRecord();

                        int iIndex = 0;
                        foreach (var filedItem in filedsXml)
                        {
                            string fieldid   = filedItem.Attribute("fieldid").Value;
                            string fieldname = filedItem.Attribute("fieldname").Value;
                            int    filedtype = lpRecord.GetFieldType(iIndex);

                            PARAMTYPE paramtype = PARAMTYPE.emFile;
                            string    value     = "";
                            if (filedItem.Attribute("value") != null)
                            {
                                value = filedItem.Attribute("value").Value;
                            }
                            if (filedItem.Attribute("paramtype") != null)
                            {
                                string strparamtype = filedItem.Attribute("paramtype").Value;
                                if ("file".Equals(strparamtype))
                                {
                                    paramtype = PARAMTYPE.emFile;
                                }
                            }
                            CaseFiled filed = new CaseFiled()
                            {
                                FiledTag   = int.Parse(fieldid),
                                FiledName  = fieldname,
                                FiledValue = value,
                                FiledType  = filedtype,
                                FiledIndex = iIndex,
                                ParamType  = paramtype
                            };
                            var fileElemt = filedItem.Element("file");
                            if (fileElemt != null && paramtype == PARAMTYPE.emFile)
                            {
                                filed.ColumnName = fieldname;
                                if (fileElemt.Attribute("columnname") != null)
                                {
                                    filed.ColumnName = fileElemt.Attribute("columnname").Value;
                                }

                                if (fileElemt.Attribute("filename") != null)
                                {
                                    filed.FileName = fileElemt.Attribute("filename").Value;
                                    CSVFile csvFile = null;
                                    if (File.Exists(filed.FileName) && !fun.AllCsvFile.TryGetValue(filed.FileName, out csvFile))
                                    {
                                        var data = CSVFileHelper.OpenCSV(filed.FileName);
                                        if (data != null)
                                        {
                                            csvFile          = new CSVFile();
                                            csvFile.FileName = filed.FiledName;
                                            csvFile.Table    = data;
                                            fun.AllCsvFile.Add(filed.FileName, csvFile);
                                        }
                                    }
                                    if (csvFile != null && string.IsNullOrWhiteSpace(csvFile.DefaultFieldName))
                                    {
                                        csvFile.DefaultFieldName = fieldname;
                                    }
                                }



                                filed.SelectRow = VALUETYPE.emSameLine;
                                if (fileElemt.Attribute("selectrow") != null)
                                {
                                    try
                                    {
                                        string SelectRow = fileElemt.Attribute("selectrow").Value;
                                        if ("sequence".Equals(SelectRow))
                                        {
                                            filed.SelectRow = VALUETYPE.emSequence;
                                        }
                                        else if (new Regex("same_line").Match(SelectRow).Success)
                                        {
                                            filed.SameLineColumn = SelectRow.Split('[')[1].Split(']')[0];
                                            filed.SelectRow      = VALUETYPE.emSameLine;
                                        }
                                        else if ("random".Equals(SelectRow))
                                        {
                                            //默认("random".Equals(SelectRow))
                                            filed.SelectRow = VALUETYPE.emRandom;
                                        }
                                    }
                                    catch (Exception)
                                    {
                                        //throw;
                                    }
                                }
                            }
                            fun.Fileds.Add(filed);
                            iIndex++;
                        }
                        fastmsg.FreeMsg();
                    }
                }

                return(datas);
            }
            catch (Exception error)
            {
                this.Dispatcher.Invoke(() => { MessageBox.Show($"{error.Message} \r\n {error.StackTrace}"); });
                return(datas);
            }
        }