New file |
| | |
| | | using Shared.Common; |
| | | using Shared.Phone.UserCenter; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | using ZigBee.Device; |
| | | namespace Shared.Phone.MainPage.ControlForm |
| | | { |
| | | /// <summary> |
| | | /// 晾衣架类型的深度卡片界面 |
| | | /// </summary> |
| | | public class DeviceAirerDetailCardForm : DeviceDetailCardCommonForm |
| | | { |
| | | #region ■ 变量声明___________________________ |
| | | /// <summary> |
| | | /// 当前晾衣架 |
| | | /// </summary> |
| | | Airer airer = null; |
| | | /// <summary> |
| | | /// 打开控件 |
| | | /// </summary> |
| | | private IconBigViewControl btnOpen = null; |
| | | /// <summary> |
| | | /// 停止控件 |
| | | /// </summary> |
| | | private IconBigViewControl btnStop = null; |
| | | /// <summary> |
| | | /// 关闭控件 |
| | | /// </summary> |
| | | private IconBigViewControl btnClose = null; |
| | | /// <summary> |
| | | /// 照明 |
| | | /// </summary> |
| | | private IconViewControl btnLight = null; |
| | | /// <summary> |
| | | /// 消毒 |
| | | /// </summary> |
| | | private IconViewControl btnDisinfect = null; |
| | | /// <summary> |
| | | /// 风干 |
| | | /// </summary> |
| | | private IconViewControl btnWind = null; |
| | | /// <summary> |
| | | /// 烘干 |
| | | /// </summary> |
| | | private IconViewControl btnDry = null; |
| | | |
| | | /// <summary> |
| | | /// 开合帘控件 |
| | | /// </summary> |
| | | private CurtainSeekBar SeekBarOpenCurtain = null; |
| | | /// <summary> |
| | | /// 进度值是否在改变中 |
| | | /// </summary> |
| | | private bool isProgressing = false; |
| | | /// <summary> |
| | | /// 是否已经初始化了控件(因为底层有可能会刷新整个界面) |
| | | /// </summary> |
| | | private bool hadInitControl = false; |
| | | /// <summary> |
| | | /// 烘干时间 |
| | | /// </summary> |
| | | Button btnDryTimeText; |
| | | /// <summary> |
| | | /// 风干时间 |
| | | /// </summary> |
| | | Button btnWindTimeText; |
| | | /// <summary> |
| | | /// 消毒时间 |
| | | /// </summary> |
| | | Button btnDisinfectTimeText; |
| | | /// <summary> |
| | | /// 烘干文本时间处理 |
| | | /// </summary> |
| | | public Action<string> actionDry = null; |
| | | /// <summary> |
| | | /// 风干文本时间处理 |
| | | /// </summary> |
| | | public Action<string> actionWind = null; |
| | | /// <summary> |
| | | /// 消毒文本时间处理 |
| | | /// </summary> |
| | | public Action<string> actionDisinfect = null; |
| | | #endregion |
| | | |
| | | #region ■ 初始化_____________________________ |
| | | |
| | | /// <summary> |
| | | /// 底层初始化中部控件完成之后 |
| | | /// </summary> |
| | | /// <param name="frameWhiteBack"></param> |
| | | public override void InitMiddleFrameAfter(FrameLayout frameWhiteBack) |
| | | { |
| | | airer = this.device as Airer; |
| | | //左滑不能 |
| | | this.ScrollEnabled = false; |
| | | //设置状态文字 |
| | | this.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device)); |
| | | |
| | | var btnDoorLockPic = new Button() |
| | | { |
| | | Width = Application.GetMinReal(432), |
| | | Height = Application.GetMinReal(302), |
| | | Y = Application.GetRealHeight(228), |
| | | UnSelectedImagePath = "Airer/DetailAirerPic.png", |
| | | Gravity = Gravity.CenterHorizontal, |
| | | }; |
| | | frameWhiteBack.AddChidren(btnDoorLockPic); |
| | | |
| | | //打开控件 |
| | | this.btnOpen = new IconBigViewControl(81, 81); |
| | | btnOpen.btnIcon.UseClickStatu = true; |
| | | frameWhiteBack.AddChidren(btnOpen); |
| | | btnOpen.InitControl(); |
| | | btnOpen.UnSelectedImagePath = "Airer/UpOffline.png"; |
| | | btnOpen.SelectedImagePath = "Airer/Up.png"; |
| | | btnOpen.X = Application.GetRealWidth(132) - btnOpen.XOffset; |
| | | btnOpen.Y = Application.GetRealHeight(671); |
| | | |
| | | //停止控件 |
| | | this.btnStop = new IconBigViewControl(81, 81); |
| | | btnStop.btnIcon.UseClickStatu = true; |
| | | btnStop.UnSelectedImagePath = "Airer/StopOffline.png"; |
| | | btnStop.SelectedImagePath = "Airer/Stop.png"; |
| | | frameWhiteBack.AddChidren(btnStop); |
| | | btnStop.InitControl(); |
| | | btnStop.X = Application.GetRealWidth(444) - btnStop.XOffset; |
| | | btnStop.Y = btnOpen.Y; |
| | | |
| | | //关闭 |
| | | this.btnClose = new IconBigViewControl(81, 81); |
| | | btnClose.btnIcon.UseClickStatu = true; |
| | | frameWhiteBack.AddChidren(btnClose); |
| | | btnClose.InitControl(); |
| | | btnClose.UnSelectedImagePath = "Airer/DownOffline.png"; |
| | | btnClose.SelectedImagePath = "Airer/Down.png"; |
| | | btnClose.X = Application.GetRealWidth(752) - btnClose.XOffset; |
| | | btnClose.Y = btnOpen.Y; |
| | | |
| | | //烘干 |
| | | btnDry = new IconViewControl(81); |
| | | btnDry.UnSelectedImagePath = "Airer/DryOffline.png"; |
| | | btnDry.SelectedImagePath = "Airer/Dry.png"; |
| | | btnDry.X = Application.GetRealWidth(98); |
| | | btnDry.Y = Application.GetRealHeight(913); |
| | | btnDry.IsSelected = ((Airer)this.device).DryOnOffStatus == 1 ? true : false; |
| | | frameWhiteBack.AddChidren(btnDry); |
| | | |
| | | //风干 |
| | | btnWind = new IconViewControl(81); |
| | | frameWhiteBack.AddChidren(btnWind); |
| | | btnWind.UnSelectedImagePath = "Airer/WindOffline.png"; |
| | | btnWind.SelectedImagePath = "Airer/Wind.png"; |
| | | btnWind.X = Application.GetRealWidth(328); |
| | | btnWind.IsSelected = ((Airer)this.device).WindOnOffStatus == 1 ? true : false; |
| | | btnWind.Y = btnDry.Y; |
| | | |
| | | //消毒 |
| | | btnDisinfect = new IconViewControl(81); |
| | | frameWhiteBack.AddChidren(btnDisinfect); |
| | | btnDisinfect.UnSelectedImagePath = "Airer/DisinfectOffline.png"; |
| | | btnDisinfect.SelectedImagePath = "Airer/DisinfectSelected.png"; |
| | | btnDisinfect.IsSelected = ((Airer)this.device).DisinfectOnOffStatus == 1 ? true : false; |
| | | btnDisinfect.X = Application.GetRealWidth(556); |
| | | btnDisinfect.Y = btnDry.Y; |
| | | |
| | | //照明 |
| | | btnLight = new IconViewControl(81); |
| | | frameWhiteBack.AddChidren(btnLight); |
| | | btnLight.UnSelectedImagePath = "Airer/LightOffline.png"; |
| | | btnLight.SelectedImagePath = "Airer/LightSelected.png"; |
| | | btnLight.IsSelected = ((Airer)this.device).OnOffStatus == 1 ? true : false; |
| | | btnLight.X = Application.GetRealWidth(786); |
| | | btnLight.Y = btnDry.Y; |
| | | |
| | | string[] stringText = { |
| | | Language.StringByID(R.MyInternationalizationString.AirerUp), |
| | | Language.StringByID(R.MyInternationalizationString.AirerStop), |
| | | Language.StringByID(R.MyInternationalizationString.AirerDown), |
| | | Language.StringByID(R.MyInternationalizationString.AirerDry), |
| | | Language.StringByID(R.MyInternationalizationString.AirerWind), |
| | | Language.StringByID(R.MyInternationalizationString.AirerDisinfect), |
| | | Language.StringByID(R.MyInternationalizationString.AirerLight) |
| | | }; |
| | | |
| | | for (int i = 0; i < stringText.Length; i++) |
| | | { |
| | | var btnText = new Button() |
| | | { |
| | | Width = Application.GetRealWidth(69 + 20), |
| | | Height = Application.GetRealHeight(46), |
| | | TextColor = ZigbeeColor.Current.XMGray2, |
| | | TextSize = 12, |
| | | Text = stringText[i], |
| | | }; |
| | | frameWhiteBack.AddChidren(btnText); |
| | | |
| | | switch (i) |
| | | { |
| | | case 0: |
| | | btnText.X = Application.GetRealWidth(128); |
| | | btnText.Y = Application.GetRealHeight(780); |
| | | break; |
| | | case 1: |
| | | btnText.X = Application.GetRealWidth(439); |
| | | btnText.Y = Application.GetRealHeight(780); |
| | | break; |
| | | case 2: |
| | | btnText.X = Application.GetRealWidth(747); |
| | | btnText.Y = Application.GetRealHeight(780); |
| | | break; |
| | | case 3: |
| | | btnText.X = Application.GetRealWidth(94); |
| | | btnText.Y = Application.GetRealHeight(1022); |
| | | btnText.BackgroundColor = 0xff00ff; |
| | | break; |
| | | case 4: |
| | | btnText.X = Application.GetRealWidth(324); |
| | | btnText.Y = Application.GetRealHeight(1022); |
| | | btnText.BackgroundColor = 0xff00ff; |
| | | break; |
| | | case 5: |
| | | btnText.X = Application.GetRealWidth(552); |
| | | btnText.Y = Application.GetRealHeight(1022); |
| | | break; |
| | | case 6: |
| | | btnText.X = Application.GetRealWidth(782); |
| | | btnText.BackgroundColor = 0xff00ff; |
| | | btnText.Y = Application.GetRealHeight(1022); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | //右箭头 {烘干、风干和消毒的设置默认时间暂时取去掉,且倒计时也去掉,因为第三方设备不支持」 |
| | | //TimeShow(frameWhiteBack); |
| | | |
| | | ClickEventHander(); |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 时间显示_______________________ |
| | | |
| | | /// <summary> |
| | | /// 发送窗帘命令 |
| | | /// </summary> |
| | | /// <param name="comand"></param> |
| | | private void TimeShow(FrameLayout frameWhiteBack) |
| | | { |
| | | //烘干时间 |
| | | btnDryTimeText = new Button() |
| | | { |
| | | Width = Application.GetRealWidth(109 + 10), |
| | | Height = Application.GetRealHeight(40), |
| | | X = Application.GetRealWidth(81), |
| | | Y = Application.GetRealHeight(1092), |
| | | TextColor = ZigbeeColor.Current.XMOrange, |
| | | TextSize = 10, |
| | | Text = GetTimeString(airer.DryRemainTime), |
| | | }; |
| | | frameWhiteBack.AddChidren(btnDryTimeText); |
| | | |
| | | //风干时间 |
| | | btnWindTimeText = new Button() |
| | | { |
| | | Width = Application.GetRealWidth(109 + 10), |
| | | Height = Application.GetRealHeight(40), |
| | | TextColor = ZigbeeColor.Current.XMOrange, |
| | | TextSize = 10, |
| | | X = Application.GetRealWidth(311), |
| | | Y = btnDryTimeText.Y, |
| | | Text = GetTimeString(airer.WindRemainTime), |
| | | }; |
| | | frameWhiteBack.AddChidren(btnWindTimeText); |
| | | |
| | | //消毒时间 |
| | | btnDisinfectTimeText = new Button() |
| | | { |
| | | Width = Application.GetRealWidth(109 + 10), |
| | | Height = Application.GetRealHeight(40), |
| | | TextColor = ZigbeeColor.Current.XMOrange, |
| | | TextSize = 10, |
| | | Text = GetTimeString(airer.DisinfectRemainTime), |
| | | X = Application.GetRealWidth(539), |
| | | Y = btnDryTimeText.Y, |
| | | }; |
| | | frameWhiteBack.AddChidren(btnDisinfectTimeText); |
| | | |
| | | var rowAirer = new AiererTimeControl(0); |
| | | rowAirer.DetailCardActionTimeEvent += (timeCur, typeCur) => |
| | | { |
| | | switch (typeCur) |
| | | { |
| | | case 1: |
| | | btnDryTimeText.Text = GetTimeString(timeCur); |
| | | break; |
| | | case 2: |
| | | btnWindTimeText.Text = GetTimeString(timeCur); |
| | | break; |
| | | case 3: |
| | | btnDisinfectTimeText.Text = GetTimeString(timeCur); |
| | | break; |
| | | } |
| | | }; |
| | | actionDry = (textTime) => |
| | | { |
| | | btnDryTimeText.Text = textTime; |
| | | TimerHandler(airer); |
| | | }; |
| | | actionWind = (textTime) => |
| | | { |
| | | btnWindTimeText.Text = textTime; |
| | | TimerHandler(airer); |
| | | }; |
| | | actionDisinfect = (textTime) => |
| | | { |
| | | btnDisinfectTimeText.Text = textTime; |
| | | TimerHandler(airer); |
| | | }; |
| | | |
| | | TimerHandler(airer); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 点击事件处理_______________________ |
| | | /// <summary> |
| | | /// 点击事件处理 |
| | | /// </summary> |
| | | void ClickEventHander() |
| | | { |
| | | btnOpen.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //发送窗帘命令 |
| | | this.SetCurtainCommand(0); |
| | | }; |
| | | btnStop.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //如果住宅为虚拟住宅,则此功能无效 |
| | | if (Common.Config.Instance.Home.IsVirtually == true) |
| | | { |
| | | return; |
| | | } |
| | | //发送窗帘命令 |
| | | this.SetCurtainCommand(2); |
| | | }; |
| | | btnClose.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //发送窗帘命令 |
| | | this.SetCurtainCommand(1); |
| | | }; |
| | | |
| | | btnDry.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //发送开关命令 |
| | | this.SetSwitchCommand(!btnDry.IsSelected, 4); |
| | | }; |
| | | btnWind.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //发送开关命令 |
| | | this.SetSwitchCommand(!btnWind.IsSelected, 3); |
| | | }; |
| | | btnDisinfect.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //发送开关命令 |
| | | this.SetSwitchCommand(!btnDisinfect.IsSelected, 5); |
| | | }; |
| | | btnLight.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //发送开关命令 |
| | | this.SetSwitchCommand(!btnLight.IsSelected, 2); |
| | | }; |
| | | } |
| | | #endregion |
| | | |
| | | #region ■ 发送开关命令_______________________ |
| | | /// <summary> |
| | | /// 发送开关命令 |
| | | ///注意,衣架中不同端点代表不同功能 |
| | | ///回路1:窗帘控制 |
| | | ///回路2:照明控制 |
| | | ///回路3:风干控制 |
| | | ///回路4:烘干控制 |
| | | ///回路5:消毒控制 |
| | | /// </summary> |
| | | /// <param name="isOpen">发送状态</param> |
| | | /// <param name="type">发送类型:2:照明;3:风干;4:烘干;5消毒</param> |
| | | private void SetSwitchCommand(bool isOpen, int type) |
| | | { |
| | | //如果住宅为虚拟住宅 |
| | | if (Common.Config.Instance.Home.IsVirtually == true) |
| | | { |
| | | switch (type) |
| | | { |
| | | case 2: |
| | | ((Airer)this.device).OnOffStatus = isOpen == true ? 1 : 0; |
| | | //变更卡片状态 |
| | | this.RefreshSwitchStatu(((Airer)this.device).OnOffStatus == 1, 2); |
| | | break; |
| | | case 3: |
| | | ((Airer)this.device).WindOnOffStatus = isOpen == true ? 1 : 0; |
| | | if (isOpen) |
| | | { |
| | | airer.WindRemainTime = airer.WindTime; |
| | | } |
| | | //变更卡片状态 |
| | | this.RefreshSwitchStatu(((Airer)this.device).WindOnOffStatus == 1, 3); |
| | | break; |
| | | case 4: |
| | | ((Airer)this.device).DryOnOffStatus = isOpen == true ? 1 : 0; |
| | | if (isOpen) |
| | | { |
| | | airer.DryRemainTime = airer.DryTime; |
| | | } |
| | | //变更卡片状态 |
| | | this.RefreshSwitchStatu(((Airer)this.device).DryOnOffStatus == 1, 4); |
| | | break; |
| | | case 5: |
| | | ((Airer)this.device).DisinfectOnOffStatus = isOpen == true ? 1 : 0; |
| | | if (isOpen) |
| | | { |
| | | airer.DisinfectRemainTime = airer.DisinfectTime; |
| | | } |
| | | //变更卡片状态 |
| | | this.RefreshSwitchStatu(((Airer)this.device).DisinfectOnOffStatus == 1, 5); |
| | | break; |
| | | } |
| | | return; |
| | | } |
| | | |
| | | //检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息 |
| | | var listControl = new List<ButtonBase>(); |
| | | listControl.Add(btnDry); |
| | | listControl.Add(btnWind); |
| | | listControl.Add(btnDisinfect); |
| | | listControl.Add(btnLight); |
| | | this.StartCheckResponeResult(listControl, (result) => |
| | | { |
| | | //接收到网关回复 |
| | | if (result == true) |
| | | { |
| | | HdlThreadLogic.Current.RunMain(() => |
| | | { |
| | | //变更卡片状态 |
| | | switch (type) |
| | | { |
| | | case 2: |
| | | bool statu = ((Airer)this.device).OnOffStatus == 1; |
| | | this.RefreshSwitchStatu(statu, type); |
| | | break; |
| | | case 3: |
| | | bool statu5 = ((Airer)this.device).WindOnOffStatus == 1; |
| | | this.RefreshSwitchStatu(statu5, type); |
| | | break; |
| | | case 4: |
| | | bool statu4 = ((Airer)this.device).DryOnOffStatus == 1; |
| | | this.RefreshSwitchStatu(statu4, type); |
| | | break; |
| | | case 5: |
| | | bool statu3 = ((Airer)this.device).DisinfectOnOffStatus == 1; |
| | | this.RefreshSwitchStatu(statu3, type); |
| | | break; |
| | | } |
| | | |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | //打开 |
| | | //switch (type) |
| | | //{ |
| | | // case 3: |
| | | //发送默认时间 |
| | | //if (airer.WindTime == 0) |
| | | //{ |
| | | // airer.WindTime = 180; |
| | | //} |
| | | //airer.SetAirerFunTimeDevice(airer.WindTime, 3); |
| | | // break; |
| | | //case 4: |
| | | //发送默认时间 |
| | | //if (airer.DryTime == 0) |
| | | //{ |
| | | // airer.DryTime = 180; |
| | | //} |
| | | //airer.SetAirerFunTimeDevice(airer.DryTime, 4); |
| | | // break; |
| | | //case 5: |
| | | //发送默认时间 |
| | | //if (airer.DisinfectTime == 0) |
| | | //{ |
| | | // airer.DisinfectTime = 30; |
| | | //} |
| | | //airer.SetAirerFunTimeDevice(airer.DisinfectTime, 5); |
| | | // break; |
| | | //} |
| | | if (isOpen == true) |
| | | { |
| | | airer.SwitchControl(1, type); |
| | | } |
| | | else |
| | | { |
| | | airer.SwitchControl(0, type); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 发送窗帘命令_______________________ |
| | | |
| | | /// <summary> |
| | | /// 发送窗帘命令 |
| | | ///注意,衣架中不同端点代表不同功能 |
| | | ///回路1:窗帘控制 |
| | | ///回路2:照明控制 |
| | | ///回路3:风干控制 |
| | | ///回路4:烘干控制 |
| | | ///回路5:消毒控制 |
| | | /// </summary> |
| | | /// <param name="comand"></param> |
| | | private void SetCurtainCommand(int comand) |
| | | { |
| | | // |
| | | this.device.DeviceEpoint = 1; |
| | | //发送命令 |
| | | ((Airer)device).AirerUpDownStopControl(comand); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 刷新开关状态_______________________ |
| | | |
| | | /// <summary> |
| | | /// 刷新开关状态 |
| | | /// </summary> |
| | | /// <param name="isOpen">打开状态</param> |
| | | /// <param name="type">发送类型:2:照明;3:风干;4:烘干;5消毒</param> |
| | | private void RefreshSwitchStatu(bool isOpen, int type) |
| | | { |
| | | switch (type) |
| | | { |
| | | case 2: |
| | | btnLight.IsSelected = isOpen; |
| | | break; |
| | | case 3: |
| | | btnWind.IsSelected = isOpen; |
| | | //btnWindTimeText.Text = GetTimeString(airer.WindRemainTime); |
| | | //if (!isOpen) |
| | | //{ |
| | | // airer.WindRemainTime = 0; |
| | | //} |
| | | break; |
| | | case 4: |
| | | btnDry.IsSelected = isOpen; |
| | | //btnDryTimeText.Text = GetTimeString(airer.DryRemainTime); |
| | | //if (!isOpen) |
| | | //{ |
| | | // airer.DryRemainTime = 0; |
| | | //} |
| | | break; |
| | | case 5: |
| | | btnDisinfect.IsSelected = isOpen; |
| | | //btnDisinfectTimeText.Text = GetTimeString(airer.DisinfectRemainTime); |
| | | //if (!isOpen) |
| | | //{ |
| | | // airer.DisinfectRemainTime = 0; |
| | | //} |
| | | break; |
| | | } |
| | | //设置状态文字 |
| | | this.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device)); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 是否获取网关反馈的结果_____________ |
| | | |
| | | /// <summary> |
| | | /// 检测网关的反馈结果(属性上报的对象:device.DeviceStatusReport) |
| | | /// </summary> |
| | | /// <param name="comandDiv">命令区分</param> |
| | | /// <param name="report">上报数据</param> |
| | | /// <returns></returns> |
| | | public override bool CheckResponeResultStatu(ReceiveComandDiv comandDiv, CommonDevice report) |
| | | { |
| | | if (comandDiv == ReceiveComandDiv.A设备属性上报) |
| | | { |
| | | HdlThreadLogic.Current.RunMain(() => |
| | | { |
| | | //变更卡片状态 |
| | | switch (report.DeviceEpoint) |
| | | { |
| | | case 2: |
| | | this.RefreshSwitchStatu(((Airer)this.device).OnOffStatus == 1, 2); |
| | | break; |
| | | case 3: |
| | | this.RefreshSwitchStatu(((Airer)this.device).WindOnOffStatus == 1, 3); |
| | | break; |
| | | case 4: |
| | | this.RefreshSwitchStatu(((Airer)this.device).DryOnOffStatus == 1, 4); |
| | | break; |
| | | case 5: |
| | | this.RefreshSwitchStatu(((Airer)this.device).DisinfectOnOffStatus == 1, 5); |
| | | break; |
| | | } |
| | | }); |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | /// <summary> |
| | | /// 时间倒计时设置 |
| | | /// <param name="type">晾衣架时间 :1烘干,2:风干;3消毒</param> |
| | | /// </summary> |
| | | /// <param name="sceneContr"></param> |
| | | public async void TimerHandler(Airer airer) |
| | | { |
| | | if (airer.DryOnOffStatus == 1 && airer.DryRemainTime != 0) |
| | | { |
| | | new System.Threading.Thread(async () => |
| | | { |
| | | while (airer.DryRemainTime > 0 && this.Parent != null) |
| | | { |
| | | System.Threading.Thread.Sleep(1000); |
| | | HdlThreadLogic.Current.RunMain(() => |
| | | { |
| | | actionDry?.Invoke(GetTimeString(airer.DryRemainTime)); |
| | | }, ShowErrorMode.NO); |
| | | airer.DryRemainTime--; |
| | | } |
| | | HdlThreadLogic.Current.RunMain(() => |
| | | { |
| | | if (this.Parent != null) |
| | | { |
| | | //直接开启Loading特效 |
| | | actionDry?.Invoke(""); |
| | | } |
| | | }, ShowErrorMode.NO); |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | if (airer.WindOnOffStatus == 1 && airer.WindRemainTime != 0) |
| | | { |
| | | //开启风干时间 |
| | | new System.Threading.Thread(async () => |
| | | { |
| | | while (airer.WindRemainTime > 0 && this.Parent != null) |
| | | { |
| | | System.Threading.Thread.Sleep(1000); |
| | | HdlThreadLogic.Current.RunMain(() => |
| | | { |
| | | actionWind?.Invoke(GetTimeString(airer.WindRemainTime)); |
| | | }, ShowErrorMode.NO); |
| | | airer.WindRemainTime--; |
| | | } |
| | | HdlThreadLogic.Current.RunMain(() => |
| | | { |
| | | if (this.Parent != null) |
| | | { |
| | | //直接开启Loading特效 |
| | | actionWind?.Invoke(""); |
| | | } |
| | | }, ShowErrorMode.NO); |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | if (airer.DisinfectOnOffStatus == 1 && airer.DisinfectRemainTime != 0) |
| | | { |
| | | //开启消毒时间 |
| | | new System.Threading.Thread(async () => |
| | | { |
| | | while (airer.DisinfectRemainTime > 0 && this.Parent != null) |
| | | { |
| | | System.Threading.Thread.Sleep(1000); |
| | | HdlThreadLogic.Current.RunMain(() => |
| | | { |
| | | actionDisinfect?.Invoke(GetTimeString(airer.DisinfectRemainTime)); |
| | | }, ShowErrorMode.NO); |
| | | airer.DisinfectRemainTime--; |
| | | } |
| | | |
| | | HdlThreadLogic.Current.RunMain(() => |
| | | { |
| | | if (this.Parent != null) |
| | | { |
| | | //直接开启Loading特效 |
| | | actionDisinfect?.Invoke(""); |
| | | } |
| | | }, ShowErrorMode.NO); |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取场景延时字符串 |
| | | /// </summary> |
| | | /// <param name="second"></param> |
| | | /// <returns></returns> |
| | | public static string GetTimeString(int second) |
| | | { |
| | | if (second == 0) |
| | | { |
| | | return null; |
| | | } |
| | | string timeStr = string.Empty; |
| | | int hour = second / 3600; |
| | | int minu = second % 3600 / 60; |
| | | int sec = second % 60; |
| | | string h = string.Empty; |
| | | string m = string.Empty; |
| | | string s = string.Empty; |
| | | |
| | | if (hour > 0) |
| | | { |
| | | if (hour < 10) |
| | | { |
| | | h = "0" + hour; |
| | | } |
| | | else |
| | | { |
| | | h = hour.ToString(); |
| | | } |
| | | timeStr += $"{h}:"; |
| | | |
| | | if (minu >= 0) |
| | | { |
| | | if (minu < 10) |
| | | { |
| | | m = "0" + minu; |
| | | } |
| | | else |
| | | { |
| | | m = minu.ToString(); |
| | | } |
| | | timeStr += $"{m}:"; |
| | | } |
| | | |
| | | if (sec >= 0) |
| | | { |
| | | if (sec < 10) |
| | | { |
| | | s = "0" + sec; |
| | | } |
| | | else |
| | | { |
| | | s = minu.ToString(); |
| | | } |
| | | timeStr += $"{s}"; |
| | | } |
| | | |
| | | return timeStr; |
| | | } |
| | | else |
| | | { |
| | | if (minu > 0) |
| | | { |
| | | timeStr = "00:"; |
| | | if (minu < 10) |
| | | { |
| | | m = "0" + minu; |
| | | } |
| | | else |
| | | { |
| | | m = minu.ToString(); |
| | | } |
| | | timeStr += $"{m}:"; |
| | | |
| | | if (sec >= 0) |
| | | { |
| | | if (sec < 10) |
| | | { |
| | | s = "0" + sec; |
| | | } |
| | | else |
| | | { |
| | | s = sec.ToString(); |
| | | } |
| | | timeStr += $"{s}"; |
| | | } |
| | | |
| | | return timeStr; |
| | | } |
| | | else |
| | | { |
| | | if (sec > 0) |
| | | { |
| | | timeStr = "00:00:"; |
| | | if (sec < 10) |
| | | { |
| | | s = "0" + sec; |
| | | } |
| | | else |
| | | { |
| | | s = sec.ToString(); |
| | | } |
| | | timeStr += $"{s}"; |
| | | return timeStr; |
| | | } |
| | | else |
| | | { |
| | | return ""; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |