diff --git a/DM_Weight/App.xaml.cs b/DM_Weight/App.xaml.cs index f1d140d..55f32dd 100644 --- a/DM_Weight/App.xaml.cs +++ b/DM_Weight/App.xaml.cs @@ -291,6 +291,9 @@ namespace DM_Weight containerRegistry.RegisterForNavigation(); + //空页面,用于跳出登录时跳转以避免不走OnNavigatedFrom情况 + containerRegistry.RegisterForNavigation(); + logger.Info("结束APP-RegisterTypes"); } diff --git a/DM_Weight/Port/SocketHelper.cs b/DM_Weight/Port/SocketHelper.cs index c3656d6..e3aafda 100644 --- a/DM_Weight/Port/SocketHelper.cs +++ b/DM_Weight/Port/SocketHelper.cs @@ -84,6 +84,7 @@ namespace DM_Weight.Port { if (i <= 3) { + Thread.Sleep(1950); //没连上会再连两次 SocketConnect(); } diff --git a/DM_Weight/ViewModels/AdditionWindowViewModel.cs b/DM_Weight/ViewModels/AdditionWindowViewModel.cs index 8b5911d..41eef98 100644 --- a/DM_Weight/ViewModels/AdditionWindowViewModel.cs +++ b/DM_Weight/ViewModels/AdditionWindowViewModel.cs @@ -40,7 +40,12 @@ namespace DM_Weight.ViewModels get => _finishStatus; set => SetProperty(ref _finishStatus, value); } - + private bool _openStatusBtn =false; + public bool OpenStatusBtn + { + get => _openStatusBtn; + set => SetProperty(ref _openStatusBtn, value); + } IDialogService _dialogService; IEventAggregator _eventAggregator; //private PortUtil _portUtil; @@ -114,9 +119,9 @@ namespace DM_Weight.ViewModels Type = 55, InvoiceId = "手术间补药", }).ExecuteCommand(); - - _socketHelper.speechSynthesizer.SpeakAsyncCancelAll(); - _socketHelper.speechSynthesizer.Resume(); + _socketHelper.OpenStatus = true; + //_socketHelper.speechSynthesizer.SpeakAsyncCancelAll(); + //_socketHelper.speechSynthesizer.Resume(); _socketHelper.SpeakAsync($"正在打开{selectedStock[i].DrawerNo}号手术间"); //ModbusHelper.GetInstance().OpenBoxDoor(selectedStock[i].DrawerNo - 1); @@ -133,31 +138,81 @@ namespace DM_Weight.ViewModels }; _eventAggregator.GetEvent().Publish(alertMsg); logger.Info($"网口连接异常,正在重试{ex.Message}"); + _socketHelper.OpenStatus = false; return; } Thread.Sleep(100); } } - //Task.Factory.StartNew(async () => - //{ - // bool loop = true; - // while (loop) - // { - // await Task.Delay(1000); - // bool[] boolsl = ModbusHelper.GetInstance().GetAllBoxState(); - // bool state = Array.TrueForAll(boolsl, b => b == false); - // if (state) - // { - // loop = false; - // ModbusHelper.BoxOperate = false; - // } - // else - // { - // ModbusHelper.BoxOperate = true; - // //ModbusHelper.SpeakAsync("药箱已打开,请及时关闭"); - // } - // } - //}); + int iException = 0; + Thread.Sleep(200); + new PromiseUtil().taskAsyncLoop(200, 0, async (options, next, stop) => + { + + _socketHelper.IsMultiThread = true; + try + { + if (_socketHelper.OpenStatus) + { + + //bool[] boolsl = ModbusHelper.GetInstance().GetAllBoxState(); + _socketHelper.SendMessage(new MyBaseMessage() { lockNo = 0x33, functionCode = 4, delay = 2 }); + + //ModbusHelper.SpeakAsync($"i为{i};状态为:{_socketHelper.OpenStatus}"); + //bool state = Array.TrueForAll(boolsl, b => b == false); + if (_socketHelper.OpenStatus) + { + logger.Info($"OpenStatus:{_socketHelper.OpenStatus}"); + //if (i == 0) + //{ + // //ModbusHelper.SpeakAsync("请及时关闭药箱"); + // i = 10; + //} + OpenStatusBtn =true; + next(); + } + else + { + logger.Info($"OpenStatus:{_socketHelper.OpenStatus}"); + + _socketHelper.dateTime = DateTime.Now; + _socketHelper.IsMultiThread = false; + FinishStatus = Visibility.Visible; + OpenStatusBtn = false; + stop(); + } + } + else + { + _socketHelper.dateTime = DateTime.Now; + _socketHelper.IsMultiThread = false; + FinishStatus = Visibility.Visible; + OpenStatusBtn = false; + stop(); + } + + iException = 0; + } + catch (Exception ex) + { + iException++; + if (iException >= 3) + { + _socketHelper.OpenStatus = false; + FinishStatus = Visibility.Visible; + OpenStatusBtn = false; + } + // _socketHelper.OpenStatus = false; + AlertMsg alertMsg = new AlertMsg + { + Message = $"网口连接异常,正在重试{ex.Message}", + Type = MsgType.ERROR, + }; + _eventAggregator.GetEvent().Publish(alertMsg); + logger.Info($"网口连接异常,正在重试{ex.Message}"); + next(); + } + }); } else { @@ -169,7 +224,7 @@ namespace DM_Weight.ViewModels _eventAggregator.GetEvent().Publish(alertMsg); return; } - FinishStatus = Visibility.Visible; + //FinishStatus = Visibility.Visible; }); } //完成按钮 @@ -227,6 +282,7 @@ namespace DM_Weight.ViewModels }); if (f.Data) { + FinishStatus = Visibility.Collapsed; RequestData(); AlertMsg alertMsg = new AlertMsg { diff --git a/DM_Weight/ViewModels/EmptyWindowViewModel.cs b/DM_Weight/ViewModels/EmptyWindowViewModel.cs new file mode 100644 index 0000000..2909812 --- /dev/null +++ b/DM_Weight/ViewModels/EmptyWindowViewModel.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DM_Weight.ViewModels +{ + internal class EmptyWindowViewModel + { + } +} diff --git a/DM_Weight/ViewModels/HomeWindowViewModel.cs b/DM_Weight/ViewModels/HomeWindowViewModel.cs index 6e14f23..8c28ef0 100644 --- a/DM_Weight/ViewModels/HomeWindowViewModel.cs +++ b/DM_Weight/ViewModels/HomeWindowViewModel.cs @@ -316,6 +316,7 @@ namespace DM_Weight.ViewModels logger.Info($"用户【{Operator?.Nickname}】退出登录"); Operator = null; Reviewer = null; + _regionManager.RequestNavigate("ContentRegion", "EmptyWindow"); _regionManager.RequestNavigate("MainRegion", "LoginWindow"); //} //else @@ -570,6 +571,7 @@ namespace DM_Weight.ViewModels Reviewer = null; //Application.Current.Dispatcher.Invoke(() => //{ + _regionManager.RequestNavigate("ContentRegion", "EmptyWindow"); _regionManager.RequestNavigate("MainRegion", "LoginWindow"); //}); AlertMsg alertMsg = new AlertMsg @@ -609,6 +611,7 @@ namespace DM_Weight.ViewModels stop(); System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() => { + _regionManager.RequestNavigate("ContentRegion", "EmptyWindow"); _regionManager.RequestNavigate("MainRegion", "LoginWindow"); })); //}); diff --git a/DM_Weight/Views/AdditionWindow.xaml b/DM_Weight/Views/AdditionWindow.xaml index 6510320..cf87fe7 100644 --- a/DM_Weight/Views/AdditionWindow.xaml +++ b/DM_Weight/Views/AdditionWindow.xaml @@ -62,7 +62,9 @@