如何在Wpf应用程序的两个窗口之间维护会话

本文关键字:窗口 两个 之间 维护 会话 维护会 Wpf 应用程序 | 更新日期: 2023-09-27 18:28:33

我有WPF应用程序,其中有一个注册窗口。当我点击注册选项卡时,它会打开注册窗口。我的要求是,如果在点击注册选项卡后没有活动,它应该超时并移动到另一个窗口。

如何在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实例。