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

时间:2015-12-30 11:29:52

标签: c# wpf silverlight data-binding

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

2 个答案:

答案 0 :(得分:3)

我认为您需要检查窗口上的空闲时间

在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;   

}

答案 1 :(得分:1)

您可以将值放在Application.Current.Properties中,以便在整个应用程序中使用它。

Application.Current.Resources["ResourceName"] = "SomeData";
  

存储此类数据的一般策略是拥有公共类   使用公共属性/字段并从中访问它们   应用。但是,使用Windows Presentation Foundation(WPF),   框架本身提供了一个应用程序范围的“存储包”,   Application.Properties,可用于相同的目的。   此包是基于应用程序域的特定于线程安全的键值   IDictionary实例。