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

Posted

技术标签:

【中文标题】如何在两个窗口之间维护 Wpf 应用程序中的会话? [关闭]【英文标题】:How to maintain session in Wpf Application between two window? [closed] 【发布时间】:2016-04-04 09:02:33 【问题描述】:

我有WPF 申请,我有一个注册窗口。 当我单击注册选项卡时,它会打开注册窗口。 我的要求是,如果点击注册标签后没有任何活动,它应该超时并移动到另一个窗口。

【问题讨论】:

你能发布你到目前为止的尝试吗? 好的模式是在整个应用程序中保留一个窗口。 WPF 公开 ContentControl 以便在视图之间切换。 【参考方案1】:

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

关于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;   


【讨论】:

嗨,贾斯汀,感谢您的回复,您能告诉我如何跟踪用户的上次活动吗? 试图跟踪窗口上点击的按钮或类似的东西? 它在 window_loaded 事件中。我想跟踪用户最近的活动。 我不明白你的意思。我认为用户上次活动的意思是;如果用户点击一个按钮,或者在一个文本框中输入? 其实辅助方法效果很好。它解决了我的问题。非常感谢。【参考方案2】:

您可以将值放入Application.Current.Properties 以在应用程序中使用它。

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

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

【讨论】:

但它并没有解决包含定期检查用户(最后)活动的问题。 首先他的问题不包含任何代码。我不能为他写完整的代码。我正在指导他从这个开始 嗨,拉胡尔,感谢您的回复。你能告诉如何检查用户最后的活动吗?

以上是关于如何在两个窗口之间维护 Wpf 应用程序中的会话? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET 中跨多个 Web 应用程序维护相同的会话 ID

在 CakePHP 中完成的网站上两个不同域之间的会话维护问题

在 Elastic Beanstalk 中维护会话

跨两个应用服务器管理会话

如何在 MVVM 中的 UserControl 之间进行通信 - WPF 应用程序

wpf 怎么实现 窗口和窗口之间的传值?页面和页面之间?窗口和页面之间?