private CollectorUpgrade upgradeFileCode(CollectorUpgrade reqInfo)
        {
            var resInfo = new CollectorUpgrade {
                RESULT = 0xAB
            };

            string method = "upgradecollector";

            try
            {
                string rel   = "";
                string param = "";
                param = post1.SerializeStringByObject(reqInfo);
                rel   = post1.PostInterface(url1 + method, param);

                var ret = post1.DeserializeFromString <Ret <CollectorUpgrade> >(rel);
                if (ret.Code == 0 && ret.Obj != null)
                {
                    return(ret.Obj);
                }
                else
                {
                    this.Invoke((EventHandler)(delegate
                    {
                        //lbxMemo.Items.Add(ret.Msg);
                        Logger.Instance.Error(ret.Msg);
                    }));
                    return(resInfo);
                }
            }
            catch (Exception ex)
            {
                this.Invoke((EventHandler)(delegate
                {
                    //lbxMemo.Items.Add(ex.Message);
                    Logger.Instance.Error(ex.Message);
                }));
                return(resInfo);
            }
        }
        private void btnOpenFile_Click(object sender, EventArgs e)
        {
            if (!getdtulist())
            {
                MessageBox.Show("集中器离线");
                return;
            }
            var collectorNo = txt_Collector.Text.Trim();

            try
            {
                openFileDialog1.Filter          = "bin文件|*.bin";
                openFileDialog1.FilterIndex     = 0;
                openFileDialog1.CheckFileExists = true;
                openFileDialog1.CheckPathExists = true;
                openFileDialog1.Title           = "请选择上传的代码文件";
                openFileDialog1.Multiselect     = false;
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    FileInfo fi    = new FileInfo(openFileDialog1.FileName);
                    long     _size = fi.Length;//得到文件的字节大小
                    if (_size > 1024 * 100)
                    {
                        MessageBox.Show("文件不能大于100K");
                    }

                    using (var sr = fi.OpenText())
                    {
                        string restOfStream = sr.ReadToEnd();
                        if (restOfStream.Contains("6009*Boot"))
                        {
                            MessageBox.Show("文件包含有boot在里面,不能升级");

                            return;
                        }
                        //var m = Regex.Match(restOfStream, @"SRWF-\d{4}-[a-zA-Z]{1,4}-\d{8}-Vsp\d{1}.\d{2}");
                        var m = Regex.Match(restOfStream, @"SRWF-CTP-PARKING-\d{8}-Vsp\d{1}.\d{2}");
                        if (m.Success)
                        {
                            lblVersionInfo.Text = m.Value;
                        }
                        else
                        {
                            MessageBox.Show("文件不能读取版本信息");

                            return;
                        }
                    }
                    lblFileName.Text = fi.Name;
                    byte[] buffer = new byte[fi.Length];
                    using (var fs = fi.OpenRead())
                    {
                        fs.Read(buffer, 0, (int)fi.Length);
                    }

                    Logger.Instance.Info("开始上传。。。");
                    //lbxMemo.Items.Add();

                    long max = fi.Length % 200 == 0 ? fi.Length / 200 : fi.Length / 200 + 1;
                    pb_upgrade.Maximum = (int)max;

                    //开始上传文件
                    var crc16 = CRC.CRC16(buffer, 0, (int)fi.Length);

                    UInt32 currentPackageOffset = 0;
                    UInt16 currentPackageLen    = 0;
                    UInt16 totalLen             = (UInt16)fi.Length;
                    int    upgradeCount         = 0;

                    Task.Factory.StartNew(() => {
                        this.Invoke((EventHandler)(delegate
                        {
                            btnOpenFile.Enabled = false;
                        }));
                        while (totalLen > 0)
                        {
                            if (totalLen <= 200)
                            {
                                currentPackageLen = totalLen;
                                totalLen          = 0;
                            }
                            else
                            {
                                currentPackageLen = 200;
                                totalLen         -= 200;
                            }

                            var reqInfo = new CollectorUpgrade
                            {
                                FILE_CRC16  = crc16,
                                FILE_OFFSET = currentPackageOffset,
                                FILE_LEN    = (uint)fi.Length,
                                CODE_LEN    = currentPackageLen,
                                UserName    = "******",
                                Pass        = "******",
                                CollectorNo = collectorNo,
                            };
                            reqInfo.CODE_CONTENT = new Byte[currentPackageLen];
                            Array.Copy(buffer, currentPackageOffset, reqInfo.CODE_CONTENT, 0, currentPackageLen);

                            CollectorUpgrade resInfo = null;
                            for (int i = 0; i < 3; i++)
                            {
                                resInfo = upgradeFileCode(reqInfo);
                                if (resInfo.RESULT == 0xAA)
                                {
                                    break;
                                }
                            }
                            if (resInfo.RESULT == 0xAA)
                            {
                                currentPackageOffset += currentPackageLen;
                                this.Invoke((EventHandler)(delegate
                                {
                                    pb_upgrade.Value = ++upgradeCount;
                                    lbl_packageCount.Text = upgradeCount + "/" + max;
                                }));
                            }
                            else
                            {
                                MessageBox.Show("上传失败");
                                this.Invoke((EventHandler)(delegate
                                {
                                    pb_upgrade.Value = 0;
                                    btnOpenFile.Enabled = true;
                                    Logger.Instance.Error("上传失败");
                                }));

                                return;
                            }
                        }
                        MessageBox.Show("上传成功");
                        this.Invoke((EventHandler)(delegate
                        {
                            btnOpenFile.Enabled = true;
                            Logger.Instance.Info("上传成功");
                        }));
                    });
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("上传代码文件出错: " + ex.Message);

                btnOpenFile.Enabled = true;
                Logger.Instance.Error(ex.Message);

                pb_upgrade.Value = 0;
            }
        }