HDL Home App 第二版本 旧平台金堂用 正在使用
黄学彪
2019-11-04 c7698e163e43cea9e7f8ee45f8e3f91c9265cca4
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayUpdateLogic.cs
File was renamed from ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/GatewayFirmwareUpdateControl.cs
@@ -7,12 +7,25 @@
namespace Shared.Phone.UserCenter
{
    /// <summary>
    /// 固件升级控件
    /// 网关的升级逻辑
    /// </summary>
    public class GatewayFirmwareUpdateControl : RowLayout
    public class HdlGatewayUpdateLogic
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// <para>更新状态变化的事件</para>
        /// <para>第一个参数为:</para>
        /// <para>-1:更新异常,后面的值为异常信息的翻译文本</para>
        /// <para> 0:更新状态正常变化,后面的值为状态变更的文本翻译</para>
        /// <para> 1:升级成功</para>
        /// <para> 3:从等待中取消(目前还没有用)</para>
        /// </summary>
        public Action<int, string> UpdateStatuChangedEvent = null;
        /// <summary>
        /// 进度值事件
        /// </summary>
        public Action<decimal> ProgressEvent = null;
        /// <summary>
        /// 虚拟设备的固件信息
        /// </summary>
@@ -26,11 +39,7 @@
        /// </summary>
        public FirmwareVersionInfo gatewayFirmware = null;
        /// <summary>
        /// 升级按钮(由外部进行赋值)
        /// </summary>
        public BottomClickButton btnUpdateButton = null;
        /// <summary>
        /// 当前执行状态
        /// 当前执行状态(出现错误时,它也会变成true)
        /// </summary>
        public UpdateStatuMode UpdateStatu = UpdateStatuMode.None;
        /// <summary>
@@ -43,21 +52,9 @@
        /// </summary>
        private UpdateStatuMode oldUpdateStatu = UpdateStatuMode.None;
        /// <summary>
        /// 进度控件
        /// </summary>
        private FrameLayout frameBar = null;
        /// <summary>
        /// 百分比进度
        /// </summary>
        private NormalViewControl btnProgress = null;
        /// <summary>
        /// 要升级的网关
        /// </summary>
        private ZbGateway upDatezbGateway = null;
        /// <summary>
        /// 错误信息
        /// </summary>
        private string errorMsg = string.Empty;
        #endregion
@@ -71,72 +68,13 @@
        /// <param name="i_virtualFirmware">虚拟设备的固件信息</param>
        /// <param name="i_coordinatorFirmware">协调器新版本的固件信息</param>
        /// <param name="i_gatewayFirmware">网关新版本的固件信息</param>
        public GatewayFirmwareUpdateControl(VerticalScrolViewLayout listView, ZbGateway zbGateway,
            FirmwareVersionInfo i_virtualFirmware, FirmwareVersionInfo i_coordinatorFirmware, FirmwareVersionInfo i_gatewayFirmware)
        public HdlGatewayUpdateLogic(ZbGateway zbGateway, FirmwareVersionInfo i_virtualFirmware,
            FirmwareVersionInfo i_coordinatorFirmware, FirmwareVersionInfo i_gatewayFirmware)
        {
            this.upDatezbGateway = zbGateway;
            this.virtualFirmware = i_virtualFirmware;
            this.coordinatorFirmware = i_coordinatorFirmware;
            this.gatewayFirmware = i_gatewayFirmware;
            this.Height = ControlCommonResourse.ListViewRowHeight;
            if (listView != null)
            {
                listView.AddChidren(this);
                //初始化控件
                this.InitChidrenControl();
            }
        }
        /// <summary>
        /// 初始化控件
        /// </summary>
        public void InitChidrenControl()
        {
            this.RemoveAll();
            //进度控件(背景色为绿色,会动的那个)
            this.frameBar = new FrameLayout();
            this.frameBar.Width = 0;
            this.frameBar.BackgroundColor = UserCenterColor.Current.Green;
            this.AddChidren(frameBar);
            //桌布
            var frameLayout = new RowLayoutControl();
            frameLayout.BackgroundColor = UserCenterColor.Current.Transparent;
            this.AddChidren(frameLayout);
            //图标
            var btnIcon = frameLayout.frameTable.AddLeftIcon();
            HdlGatewayLogic.Current.SetGatewayIcon(btnIcon, this.upDatezbGateway);
            //指定的设备
            var btnDevice = frameLayout.frameTable.AddLeftCaption("", 830);
            //btnDevice.Y = UserCenterLogic.GetControlChidrenYaxis(ControlCommonResourse.ListViewRowHeight, ControlCommonResourse.ListViewRowHalfHeight, UViewAlignment.Top);
            btnDevice.X = Application.GetRealWidth(200);
            btnDevice.BackgroundColor = UserCenterColor.Current.Transparent;
            btnDevice.Text = HdlGatewayLogic.Current.GetGatewayName(upDatezbGateway);
            //固件信息
            this.btnProgress = frameLayout.frameTable.AddLeftCaption("", 830);
            //btnDevice.Y = UserCenterLogic.GetControlChidrenYaxis(ControlCommonResourse.ListViewRowHeight, ControlCommonResourse.ListViewRowHalfHeight, UViewAlignment.Bottom);
            btnDevice.X = Application.GetRealWidth(200);
            btnProgress.BackgroundColor = UserCenterColor.Current.Transparent;
            if (this.gatewayFirmware != null)
            {
                //版本
                btnProgress.Text = Common.LocalDevice.Current.AppendVersion(this.gatewayFirmware.FirmwareVersion);
            }
            else if (this.coordinatorFirmware != null)
            {
                //版本
                btnProgress.Text = Common.LocalDevice.Current.AppendVersion(this.coordinatorFirmware.FirmwareVersion);
            }
            else if (this.virtualFirmware != null)
            {
                //版本
                btnProgress.Text = Common.LocalDevice.Current.AppendVersion(this.virtualFirmware.FirmwareVersion);
            }
        }
        #endregion
@@ -148,10 +86,6 @@
        /// </summary>
        public void StartUpdateReady()
        {
            if (btnUpdateButton.CanClick == false)
            {
                return;
            }
            if (this.UpdateStatu == UpdateStatuMode.Wait)
            {
                //如果是等待模式,再次点击时,移除列表
@@ -160,10 +94,9 @@
                {
                    FirmwareUpdateResourse.dicGatewayUpdateList.Remove(gwId);
                }
                //升级
                btnUpdateButton.TextID = R.MyInternationalizationString.uLevelUp;
                btnUpdateButton.SetNotClickStatu();
                this.UpdateStatu = UpdateStatuMode.None;
                //取消
                this.UpdateStatuChangedEvent?.Invoke(3, "");
                return;
            }
            //如果它有状态,则表示之前它被什么错误中断了
@@ -175,10 +108,10 @@
            //进入等待模式
            this.UpdateStatu = UpdateStatuMode.Wait;
            this.btnUpdateButton.TextID = R.MyInternationalizationString.uWaitting;
            this.btnUpdateButton.SetClickStatu();
            string gwId2 = HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway);
            FirmwareUpdateResourse.dicGatewayUpdateList[gwId2] = this;
            //等待中…
            this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uWaitting));
            //执行下一个可更新的固件的更新操作
            HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
@@ -189,13 +122,9 @@
        /// </summary>
        public void DoStartUpdate()
        {
            //清空错误信息
            this.errorMsg = string.Empty;
            //状态变更
            this.IsFinishUpdate = false;
            this.UpdateStatu = UpdateStatuMode.Action;
            //开始执行操作的时候,按键不能再点击
            this.btnUpdateButton.CanClick = false;
            //设置拥有网关正在升级的标识
            HdlGatewayLogic.Current.SetHadGatewayUpdateFlage(true);
            //根据状态执行操作
@@ -277,14 +206,8 @@
            }
            this.UpdateStatu = UpdateStatuMode.VirtualDownLoad;
            Application.RunOnMainThread(() =>
            {
                this.btnUpdateButton.TextID = R.MyInternationalizationString.uDownLoading;
            });
            //虚拟驱动固件下载中
            string msg = Language.StringByID(R.MyInternationalizationString.uVirtualFirmwareDownLoading);
            this.SetProgressValue(0, 100, msg);
            this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uVirtualFirmwareDownLoading));
            //下载虚拟驱动文件的进度
            this.upDatezbGateway.ReportAction += this.DownLoadVirtualFileProgress;
@@ -293,7 +216,6 @@
            var result = await this.upDatezbGateway.DownloadFileAsync(this.virtualFirmware.DistributedMark, this.virtualFirmware.Name);
            if (string.IsNullOrEmpty(result.errorMessageBase) == false)
            {
                System.Console.WriteLine("✩✩下载虚拟驱动文件✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
                if (result.errorResponData != null && result.errorResponData.Error == 2)
                {
                    //因为tcp底层在网络不好的时候,有可能会重发多次,所以这里忽略掉【协调器正在升级或备份/恢复数据】的错误
@@ -325,7 +247,6 @@
                return;
            }
            var tempZb = (ZbGateway)objValue;
            System.Console.WriteLine("★★★下载驱动" + tempZb.CurrentGateWayId + " " + tempZb.downloadFileProgressResponData.Status + " " + tempZb.downloadFileProgressResponData.DownloadPercent);
            if (tempZb.CurrentGateWayId != HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway))
            {
                //不是自己的网关推送,则不处理
@@ -339,8 +260,7 @@
            var responData = tempZb.downloadFileProgressResponData;
            //虚拟驱动固件下载中
            string msg = Language.StringByID(R.MyInternationalizationString.uVirtualFirmwareDownLoading);
            this.SetProgressValue(responData.DownloadPercent, 100, msg);
            this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uVirtualFirmwareDownLoading));
            if (responData.Status == 2)
            {
@@ -375,6 +295,8 @@
            this.DownLoadTimeOutRefresh();
            //开启网关升级虚拟进度线程
            this.StartUpdateVirtualThread();
            //升级中
            this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uLevelUping));
            //如果虚拟驱动不需要升级,则直接跳转下一步
            if (this.virtualFirmware == null)
@@ -385,11 +307,6 @@
            }
            this.UpdateStatu = UpdateStatuMode.VirtualUpdateReady;
            Application.RunOnMainThread(() =>
            {
                this.btnUpdateButton.TextID = R.MyInternationalizationString.uLevelUping;
            });
            //升级虚拟驱动的进度
            this.upDatezbGateway.ReportAction += this.UpdateVirtualProgress;
@@ -397,7 +314,6 @@
            var result = await this.upDatezbGateway.VirtualDriveUpgradeAsync(this.virtualFirmware.Name, this.virtualFirmware.VirtualCode);
            if (string.IsNullOrEmpty(result.errorMessageBase) == false)
            {
                System.Console.WriteLine("✩✩虚拟驱动升级✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
                if (result.errorResponData != null && result.errorResponData.Error == 2)
                {
                    //因为tcp底层在网络不好的时候,有可能会重发多次,所以这里忽略掉【协调器正在升级或备份/恢复数据】的错误
@@ -411,7 +327,7 @@
                }
                //虚拟驱动升级失败
                this.errorMsg = Language.StringByID(R.MyInternationalizationString.uVirtualUpdatingFail);
                this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uVirtualUpdatingFail));
                //显示重新安装
                this.ShowReSetupMsg();
@@ -434,7 +350,6 @@
                return;
            }
            var tempZb = (ZbGateway)objValue;
            System.Console.WriteLine("★★★升级驱动" + tempZb.CurrentGateWayId + " " + tempZb.virtualDriveUpgradeResponData.Flag + " " + tempZb.virtualDriveUpgradeResponData.Percent);
            if (tempZb.CurrentGateWayId != HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway))
            {
                //不是自己的网关推送,则不处理
@@ -449,7 +364,7 @@
            if (responData.Flag != 0 && responData.Flag != 2)
            {
                //虚拟驱动升级失败
                this.errorMsg = Language.StringByID(R.MyInternationalizationString.uVirtualUpdatingFail);
                this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uVirtualUpdatingFail));
                //显示重新安装
                this.ShowReSetupMsg();
@@ -492,17 +407,11 @@
            this.DownLoadTimeOutRefresh();
            this.UpdateStatu = UpdateStatuMode.CoordinatorDownLoad;
            Application.RunOnMainThread(() =>
            {
                this.btnUpdateButton.TextID = R.MyInternationalizationString.uDownLoading;
            });
            //等个1秒
            await Task.Delay(1000);
            //协调器固件下载中
            string msg = Language.StringByID(R.MyInternationalizationString.uCoordinatorFirmwareDownLoading);
            this.SetProgressValue(0, 100, msg);
            this.UpdateStatuChangedEvent(0, Language.StringByID(R.MyInternationalizationString.uCoordinatorFirmwareDownLoading));
            //下载协调器文件的进度
            this.upDatezbGateway.ReportAction += this.DownLoadCoordinatorFileProgress;
@@ -511,7 +420,6 @@
            var result = await this.upDatezbGateway.DownloadFileAsync(this.coordinatorFirmware.DistributedMark, this.coordinatorFirmware.Name);
            if (string.IsNullOrEmpty(result.errorMessageBase) == false)
            {
                System.Console.WriteLine("✩✩下载协调器文件✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
                if (result.errorResponData != null && result.errorResponData.Error == 2)
                {
                    //因为tcp底层在网络不好的时候,有可能会重发多次,所以这里忽略掉【协调器正在升级或备份/恢复数据】的错误
@@ -543,7 +451,6 @@
                return;
            }
            var tempZb = (ZbGateway)objValue;
            System.Console.WriteLine("★★★下载协调器" + tempZb.CurrentGateWayId + " " + tempZb.downloadFileProgressResponData.Status + " " + tempZb.downloadFileProgressResponData.DownloadPercent);
            if (tempZb.CurrentGateWayId != HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway))
            {
                //不是自己的网关推送,则不处理
@@ -557,8 +464,7 @@
            var responData = tempZb.downloadFileProgressResponData;
            //协调器固件下载中
            string msg = Language.StringByID(R.MyInternationalizationString.uCoordinatorFirmwareDownLoading);
            this.SetProgressValue(responData.DownloadPercent, 100, msg);
            this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uCoordinatorFirmwareDownLoading));
            if (responData.Status == 2)
            {
@@ -598,11 +504,6 @@
            }
            this.UpdateStatu = UpdateStatuMode.CoordinatorUpdateReady;
            Application.RunOnMainThread(() =>
            {
                this.btnUpdateButton.TextID = R.MyInternationalizationString.uLevelUping;
            });
            //升级协调器的进度
            this.upDatezbGateway.ReportAction += this.UpdateCoordinatorProgress;
@@ -610,7 +511,6 @@
            var result = await this.upDatezbGateway.UpgradeNVAsync(this.coordinatorFirmware.Name);
            if (string.IsNullOrEmpty(result.errorMessageBase) == false)
            {
                System.Console.WriteLine("✩✩协调器升级✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
                if (result.errorResponData != null && result.errorResponData.Error == 2)
                {
                    //因为tcp底层在网络不好的时候,有可能会重发多次,所以这里忽略掉【协调器正在升级或备份/恢复数据】的错误
@@ -624,7 +524,7 @@
                }
                //协调器升级失败
                this.errorMsg = Language.StringByID(R.MyInternationalizationString.uCoordinatorUpdatingFail);
                this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uCoordinatorUpdatingFail));
                //显示重新安装
                this.ShowReSetupMsg();
@@ -648,7 +548,6 @@
            }
            var tempZb = (ZbGateway)objValue;
            System.Console.WriteLine("★★★升级协调器" + tempZb.CurrentGateWayId + " " + tempZb.zbGwOperationUpgradeData.Flag + " " + tempZb.zbGwOperationUpgradeData.Percent);
            if (tempZb.CurrentGateWayId != HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway))
            {
                //不是自己的网关推送,则不处理
@@ -663,7 +562,7 @@
            if (responData.Flag != 0 && responData.Flag != 2)
            {
                //协调器升级失败
                this.errorMsg = Language.StringByID(R.MyInternationalizationString.uCoordinatorUpdatingFail);
                this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uCoordinatorUpdatingFail));
                //显示重新安装
                this.ShowReSetupMsg();
@@ -702,10 +601,6 @@
                return;
            }
            this.UpdateStatu = UpdateStatuMode.GatewayDownLoad;
            Application.RunOnMainThread(() =>
            {
                this.btnUpdateButton.TextID = R.MyInternationalizationString.uDownLoading;
            });
            //刷新超时时间
            this.DownLoadTimeOutRefresh();
@@ -714,8 +609,7 @@
            await Task.Delay(1000);
            //网关固件下载中
            string msg = Language.StringByID(R.MyInternationalizationString.uGatewayFirmwareDownLoading);
            this.SetProgressValue(0, 100, msg);
            this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uGatewayFirmwareDownLoading));
            //下载网关文件的进度
            this.upDatezbGateway.ReportAction += this.DownLoadGatewayFileProgress;
@@ -724,14 +618,13 @@
            var result = await this.upDatezbGateway.DownloadFileAsync(this.gatewayFirmware.DistributedMark, this.gatewayFirmware.Name);
            if (string.IsNullOrEmpty(result.errorMessageBase) == false)
            {
                System.Console.WriteLine("✩✩下载网关文件✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
                if (result.errorResponData != null && result.errorResponData.Error == 2)
                {
                    //因为tcp底层在网络不好的时候,有可能会重发多次,所以这里忽略掉【协调器正在升级或备份/恢复数据】的错误
                    return;
                }
                //网关固件资源下载失败
                this.ShowErrorMsg(Language.StringByID(R.MyInternationalizationString.uGatewayFirmwareDownLoadFail));
                this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uGatewayFirmwareDownLoadFail));
                //显示重新下载模式
                this.ShowReDownLoadMode();
@@ -754,7 +647,6 @@
                return;
            }
            var tempZb = (ZbGateway)objValue;
            System.Console.WriteLine("★★★下载网关" + tempZb.CurrentGateWayId + " " + tempZb.downloadFileProgressResponData.Status + " " + tempZb.downloadFileProgressResponData.DownloadPercent);
            if (tempZb.CurrentGateWayId != HdlGatewayLogic.Current.GetGatewayId(this.upDatezbGateway))
            {
                //不是自己的网关推送,则不处理
@@ -766,8 +658,8 @@
            //设置进度
            var responData = tempZb.downloadFileProgressResponData;
            string msg = Language.StringByID(R.MyInternationalizationString.uGatewayFirmwareDownLoading);
            this.SetProgressValue(responData.DownloadPercent, 100, msg);
            this.SetProgressValue(responData.DownloadPercent, 100);
            if (responData.Status == 2)
            {
                //网关固件资源下载失败
@@ -783,10 +675,6 @@
            else if (responData.Status == 0)
            {
                this.upDatezbGateway.ReportAction -= this.DownLoadGatewayFileProgress;
                if (this.Parent == null)
                {
                    return;
                }
                //执行虚拟驱动升级程序
                this.DoUpdateVirtual();
            }
@@ -810,16 +698,11 @@
            }
            this.UpdateStatu = UpdateStatuMode.GatewayUpdateReady;
            Application.RunOnMainThread(() =>
            {
                this.btnUpdateButton.TextID = R.MyInternationalizationString.uLevelUping;
            });
            //网关升级
            var result = await this.upDatezbGateway.LinuxUpgradeAsync(this.gatewayFirmware.Name);
            if (string.IsNullOrEmpty(result.errorMessageBase) == false)
            {
                System.Console.WriteLine("✩✩网关升级✩" + result.errorResponData?.Error + " " + result.errorMessageBase);
                if (result.errorMessageBase.Contains("回复超时") == true)
                {
                    //网关升级的时候,有可能它不再回什么信息
@@ -862,32 +745,16 @@
            {
                //状态变更
                this.IsFinishUpdate = true;
                //让别的线程先退出
                System.Threading.Thread.Sleep(2000);
                //设置没有网关正在升级的标识
                HdlGatewayLogic.Current.SetHadGatewayUpdateFlage(false);
                this.UpdateStatu = UpdateStatuMode.UpdateSuccess;
                //执行下一个升级
                HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
                //网关升级成功!
                this.SetProgressValue(100, 100, Language.StringByID(R.MyInternationalizationString.uGatewayUpdateSuccess));
                Application.RunOnMainThread(() =>
                {
                    if (UserCenterResourse.DicActionForm.ContainsKey("GatewayFirmwareInfoForm") == true)
                    {
                        //刷新设备信息界面
                        ((GatewayManage.GatewayFirmwareInfoForm)UserCenterResourse.DicActionForm["GatewayFirmwareInfoForm"]).ShowForm(upDatezbGateway);
                    }
                    this.UpdateStatu = UpdateStatuMode.UpdateSuccess;
                    //执行下一个升级
                    HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
                    //完成
                    this.btnUpdateButton.TextID = R.MyInternationalizationString.uFinish;
                    this.btnUpdateButton.CanClick = true;
                    this.btnUpdateButton.SetNotClickStatu();
                });
                this.UpdateStatuChangedEvent?.Invoke(1, "");
            });
        }
@@ -905,18 +772,8 @@
            //设置没有网关正在升级的标识
            HdlGatewayLogic.Current.SetHadGatewayUpdateFlage(false);
            Application.RunOnMainThread(() =>
            {
                //重新升级
                this.btnUpdateButton.TextID = R.MyInternationalizationString.uReLevelUp;
                this.btnUpdateButton.CanClick = true;
                this.btnUpdateButton.SetNotClickStatu();
                //清空进度条
                this.frameBar.Width = 0;
                //执行下一个升级
                HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
            });
            //执行下一个升级
            HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
        }
        /// <summary>
@@ -929,17 +786,8 @@
            //设置没有网关正在升级的标识
            HdlGatewayLogic.Current.SetHadGatewayUpdateFlage(false);
            Application.RunOnMainThread(() =>
            {
                this.btnUpdateButton.TextID = R.MyInternationalizationString.uReDownLoad;
                this.btnUpdateButton.CanClick = true;
                this.btnUpdateButton.SetNotClickStatu();
                //清空进度条
                this.frameBar.Width = 0;
                //执行下一个升级
                HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
            });
            //执行下一个升级
            HdlFirmwareUpdateLogic.DoUpdateNextFirmware();
        }
        #endregion
@@ -951,8 +799,7 @@
        /// </summary>
        /// <param name="value">进度值</param>
        /// <param name="maxValue">最大值</param>
        /// <param name="appendText">追加信息</param>
        private void SetProgressValue(decimal value, decimal maxValue, string appendText = "")
        private void SetProgressValue(decimal value, decimal maxValue)
        {
            if (value > maxValue)
            {
@@ -960,35 +807,7 @@
                return;
            }
            decimal result = value / maxValue;
            Application.RunOnMainThread(() =>
            {
                //百分比数,取整数部分
                int percent = (int)(result * 100);
                int width = (int)(result * this.Width);
                if (appendText != string.Empty)
                {
                    this.btnProgress.Text = percent + "%  " + appendText;
                }
                else
                {
                    this.btnProgress.Text = percent + "%";
                }
                this.frameBar.Width = width;
            });
        }
        /// <summary>
        /// 设定进度值
        /// </summary>
        /// <param name="value">进度值</param>
        private void SetProgressValue(string value)
        {
            Application.RunOnMainThread(() =>
            {
                this.btnProgress.Text = value;
            });
            this.ProgressEvent?.Invoke(value);
        }
        /// <summary>
@@ -997,13 +816,7 @@
        /// <param name="value"></param>
        private void ShowErrorMsg(string value)
        {
            Application.RunOnMainThread(() =>
            {
                //设置错误信息
                this.btnProgress.Text = value;
                //清空进度条
                this.frameBar.Width = 0;
            });
            this.UpdateStatuChangedEvent?.Invoke(-1, value);
        }
        #endregion
@@ -1096,7 +909,7 @@
                    if (updateTimeOutCount == 0)
                    {
                        //响应超时,升级失败
                        this.errorMsg = Language.StringByID(R.MyInternationalizationString.uResponseTimeoutsAndUpdateFail);
                        this.UpdateStatuChangedEvent?.Invoke(-1, Language.StringByID(R.MyInternationalizationString.uResponseTimeoutsAndUpdateFail));
                        //从头再来
                        this.UpdateStatu = UpdateStatuMode.GatewayDownLoadFail;
                        //显示重新下载模式
@@ -1107,20 +920,15 @@
                    //剩余时间
                    int remainingTime = timeCount - nowTimeCount;
                    if (remainingTime == -1)
                    if (remainingTime <= -1)
                    {
                        //时间用完了,直接显示成功
                        this.IsFinishUpdate = true;
                        break;
                    }
                    //设置进度值
                    this.SetProgressValue(nowTimeCount, timeCount, msg + remainingTime + "s");
                }
                //升级失败
                if (this.errorMsg != string.Empty)
                {
                    //设置错误信息
                    this.ShowErrorMsg(this.errorMsg);
                    this.UpdateStatuChangedEvent?.Invoke(0, msg + remainingTime + "s");
                    this.SetProgressValue(nowTimeCount, timeCount);
                }
            });
        }
@@ -1209,5 +1017,18 @@
        }
        #endregion
        #region ■ 释放缓存___________________________
        /// <summary>
        /// 释放缓存
        /// </summary>
        public void Dispose()
        {
            this.ProgressEvent = null;
            this.UpdateStatuChangedEvent = null;
        }
        #endregion
    }
}