如何在Wpf应用程序的两个窗口之间维护会话
本文关键字:窗口 两个 之间 维护 会话 维护会 Wpf 应用程序 | 更新日期: 2023-09-27 18:28:33
我有WPF
应用程序,其中有一个注册窗口。当我点击注册选项卡时,它会打开注册窗口。我的要求是,如果在点击注册选项卡后没有活动,它应该超时并移动到另一个窗口。
我认为您需要检查窗口上的空闲时间
在windows加载的事件上
private static DispatcherTimer idleTimer;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
idleTimer = new DispatcherTimer();
idleTimer.Interval = TimeSpan.FromSeconds(5);
idleTimer.Tick += this.OnTimerTick;
idleTimer.Start();
}
计时器刻度事件
private void OnTimerTick(object sender, EventArgs e)
{
uint idleTime = this.GetIdleTime();
if (idleTime > 5000)
{
this.Close();
}
}
空闲时间助手方法
[DllImport("User32.dll")]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO dummy);
private uint GetIdleTime()
{
LASTINPUTINFO lastUserAction = new LASTINPUTINFO();
lastUserAction.CbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastUserAction);
GetLastInputInfo(ref lastUserAction);
return (uint)Environment.TickCount - lastUserAction.DwTime;
}
internal struct LASTINPUTINFO
{
public uint CbSize;
public uint DwTime;
}
您可以将值放在Application.Current.Properties
中,以便在整个应用程序中使用它。
Application.Current.Resources["ResourceName"] = "SomeData";
存储此类数据的一般策略是使用公共类具有公共属性/字段,并从应用但是,使用Windows Presentation Foundation(WPF)框架本身提供了一个应用范围内的"储物袋",应用程序。属性,可以用于相同的目的。此包是基于应用程序域特定线程安全密钥值的IDictionary实例。