// 开始测试
        public void StartTest()
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object o)
            {
                if (IsGBTest)                                     // 如果是国军标参数测试
                {
                    if (CheckGBParam())                           // 检查参数合法性
                    {
                        GBTestModel testModel = GetGBTestParam(); // 获取测试参数
                        if (testModel != null)
                        {
                            for (int i = testModel.GardnerXMin; i < testModel.GardnerXMax && IsStartOrStop; i++)
                            {
                                for (int j = testModel.GardnerYMin; j < testModel.GardnerYMax && IsStartOrStop; j++)
                                {
                                    testModel = GetGBTestParam();
                                    WriteMsgToForm("---新一轮测试, 当前比例参数:" + i + " 积分参数:" + j + " ---");
                                    WriteMsgToForm("正在下发参数设置...");
                                    String strRT = ClouReaderAPI.CLReader.RFID_OPTION.SetGBGardner(ConnID, i + "|" + j);
                                    if (strRT.StartsWith("0"))
                                    {
                                        WriteMsgToForm("下发参数成功...");
                                    }
                                    else
                                    {
                                        WriteMsgToForm("下发参数失败...");
                                        continue;
                                    }
                                    RunGardnerTest(testModel);
                                    WriteMsgToForm("--- 当前次测试结束,正在计算结果 ---");
                                    WriteMsgToForm("当前参数是否有效:" + testModel.IsOK);
                                    if (testModel.IsOK)
                                    {
                                        listResults.Add(testModel);
                                        if (testModel.Rate > maxRate)
                                        {
                                            maxRate = testModel.Rate;
                                        }
                                        WriteMsgToForm("当前参数成功率为:" + testModel.Rate + "目前最优成功率为:" + maxRate.ToString("F2"));
                                    }
                                }
                            }

                            if (testModel.NowTestCount >= testModel.TestCount)
                            {
                                btn_StartTest_Click(null, null);
                            }
                        }
                    }
                }
                else// 普通测试
                {
                    RunTest();
                }
            }), new object());
        }
        /// <summary>
        /// 获取国标测试
        /// </summary>
        /// <returns></returns>
        public GBTestModel GetGBTestParam()
        {
            GBTestModel rt = new GBTestModel();

            try
            {
                rt.GardnerXMin = Int32.Parse(tb_GBGardnerXMin.Text);
                rt.GardnerXMax = Int32.Parse(tb_GBGardnerXMax.Text);
                rt.GardnerYMin = Int32.Parse(tb_GBGardnerYMin.Text);
                rt.GardnerYMax = Int32.Parse(tb_GBGardnerYMax.Text);

                rt.SingleWhileTestCount = Int32.Parse(tb_TestMaxCount.Text);
                rt.ContinuousFailureMax = 10;
                rt.IsOK = false;
            }
            catch { rt = null; }
            return(rt);
        }
        public void RunGardnerTest(GBTestModel testModel)
        {
            Int32  iTestCount = 1;
            String errorMsg   = "";

            ts_avg = 0f; ts_total = 0f;
            while (IsStartOrStop && iTestCount <= testModel.SingleWhileTestCount)
            {
                // Thread.Sleep(5000);
                Helper.Helper_Timers.Restart();
                if (IsTestWrite)                              // 写
                {
                    tb_WriteData.Text = GetRandomToHex(Int32.Parse(tb_WriteLength.Text.Trim()));
                    Boolean rtWrite = false;
                    if (cmb_WriteType.SelectedIndex == 0)     // 写EPC
                    {
                        rtWrite = WriteEPC(out errorMsg);
                    }
                    else if (cmb_WriteType.SelectedIndex > 0) // 写用户数据
                    {
                        rtWrite = WriteUserData(out errorMsg);
                    }
                    if (rtWrite)
                    {
                        WriteMsgToForm("No." + iTestCount + "写入成功!");
                        WriteSuccessCount++;
                    }
                    else
                    {
                        WriteMsgToForm("No." + iTestCount + "写入失败!Msg:" + errorMsg);
                    }
                }
                if (IsTestRead)             // 读
                {
                    if (ReadSingle(out errorMsg))
                    {
                        WriteMsgToForm("No." + iTestCount + "读成功!");
                        ReadSuccessCount++;
                        testModel.SuccessCount++;       // 成功次数累加
                        testModel.ContinuousFailureCount = 0;
                    }
                    else
                    {
                        testModel.ContinuousFailureCount++;     // 失败次数累加及判断
                        if (testModel.ContinuousFailureCount >= testModel.ContinuousFailureMax)
                        {
                            testModel.IsOK = false;
                            break;
                        }
                        testModel.FailureCount++;
                        WriteMsgToForm("No." + iTestCount + "读失败!Msg:" + errorMsg);
                    }
                }
                if (!CheckWriteRead())            // 检查读写一致性
                {
                    WriteMsgToForm("No." + iTestCount + "测试,读写数据不一致!");
                }
                iTestCount++;
                WriteMsgToForm("No." + iTestCount + "Test!Time(ms):" + Helper.Helper_Timers.GetElapsed().TotalMilliseconds);
                ts_total = ts_total + Helper.Helper_Timers.GetElapsed().TotalMilliseconds;
                ts_avg   = ts_total / iTestCount;
                FlushState();
            }
        }