如何在两个窗口之间维护 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 中完成的网站上两个不同域之间的会话维护问题