更新自动退出相关代码

This commit is contained in:
马巧 2025-08-25 13:29:21 +08:00
parent ed6c98aa3b
commit 33cbdb530e
3 changed files with 40 additions and 20 deletions

View File

@ -37,7 +37,7 @@
<!-- 按处方还药或者按取药记录还药 1:处方ReturnDrugWindow22药品ReturnDrugWindow--> <!-- 按处方还药或者按取药记录还药 1:处方ReturnDrugWindow22药品ReturnDrugWindow-->
<add key="returnDrugMode" value="2" /> <add key="returnDrugMode" value="2" />
<!-- 自动退出时间单位秒为0时不自动退出 --> <!-- 自动退出时间单位秒为0时不自动退出 -->
<add key="autoExit" value="0"/> <add key="autoExit" value="10"/>
<!-- 无操作退出录像时间单位秒为0时不退出录像 --> <!-- 无操作退出录像时间单位秒为0时不退出录像 -->
<add key="stopRecord" value="0"/> <add key="stopRecord" value="0"/>

View File

@ -1,4 +1,13 @@
using log4net; using DM_Weight.Common;
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using DM_Weight.Views;
using log4net;
using log4net.Repository.Hierarchy;
using MaterialDesignThemes.Wpf;
using Newtonsoft.Json.Linq;
using Prism.Commands; using Prism.Commands;
using Prism.Events; using Prism.Events;
using Prism.Mvvm; using Prism.Mvvm;
@ -10,22 +19,14 @@ using System.Collections.Generic;
using System.Configuration; using System.Configuration;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Timers;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using DM_Weight.Models;
using DM_Weight.Port;
using DM_Weight.util;
using DM_Weight.Views;
using System.Timers;
using Unity;
using System.Windows.Threading;
using Newtonsoft.Json.Linq;
using DM_Weight.msg;
using System.Threading;
using DM_Weight.Common;
using System.Windows.Media; using System.Windows.Media;
using MaterialDesignThemes.Wpf; using System.Windows.Threading;
using Unity;
namespace DM_Weight.ViewModels namespace DM_Weight.ViewModels
{ {
@ -571,8 +572,9 @@ namespace DM_Weight.ViewModels
int autoExit = Convert.ToInt32(ConfigurationManager.AppSettings["autoExit"] ?? "0"); int autoExit = Convert.ToInt32(ConfigurationManager.AppSettings["autoExit"] ?? "0");
if (autoExit > 0) if (autoExit > 0)
{ {
logger.Info("启动自动退出检测");
//int interval = autoExit * 1000; //int interval = autoExit * 1000;
new PromiseUtil<int>().taskAsyncLoop(1000, 0, async (options, next, stop) => new PromiseUtil<int>().taskAsyncLoop(10, 0, async (options, next, stop) =>
{ {
try try
{ {
@ -590,8 +592,10 @@ namespace DM_Weight.ViewModels
stop(); stop();
System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() => System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
{ {
if (DialogHost.IsDialogOpen("RootDialog"))
DialogHost.Close("RootDialog"); {
DialogHost.Close("RootDialog");
}
_regionManager.RequestNavigate("MainRegion", "LoginWindow"); _regionManager.RequestNavigate("MainRegion", "LoginWindow");
})); }));
//}); //});
@ -601,10 +605,12 @@ namespace DM_Weight.ViewModels
{ {
if (Operator == null) if (Operator == null)
{ {
logger.Info("自动退出检测已停止");
stop(); stop();
} }
else else
{ {
logger.Info($"停止操作时间{_portUtil.dateTime},自动退出时间{autoExit},运算结果{(DateTime.Now - _portUtil.dateTime).TotalSeconds},用户上次使用系统到现在的时间间隔{CheckComputerFreeState.GetLastInputTime()}");
next(); next();
} }
} }

View File

@ -44,9 +44,23 @@ namespace DM_Weight.util
} }
else else
{ {
var count = (Environment.TickCount & Int32.MaxValue) - (long)vLastInputInfo.dwTime; //var count = (Environment.TickCount & Int32.MaxValue) - (long)vLastInputInfo.dwTime;
var icount = count / 1000; //var icount = count / 1000;
return icount; //return icount;
// 使用 64 位 TickCount 避免回绕问题
long currentTick = Environment.TickCount64;
long lastInputTick = vLastInputInfo.dwTime;
// 处理可能的回绕(虽然使用 64 位后极不可能发生)
if (currentTick < lastInputTick)
{
// 发生了回绕,调整计算
lastInputTick -= uint.MaxValue + 1L;
}
long elapsedMilliseconds = currentTick - lastInputTick;
return Math.Max(0, elapsedMilliseconds / 1000);
} }
} }
} }