在WPF应用程序中获取不活动/空闲时间
我正在寻找最好的方法来找出我的用户是否在我的WPF应用程序中空闲。 目前,我从操作系统中获取这个空闲时间,如果它们最小化应用程序,并在Internet上进行搜索,则操作系统中有一个进程,因此操作系统不会将此视为不活动时间,即使它们没有进行应用程序内的任何内容 但是,我想知道他们是否没有点击或在我的申请中做任何事情。
这就是我现在的空闲时间。
myApplication.MainMethod() { System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer(); myTimer .Interval = 1000; myTimer .Tick += new EventHandler(Timer_Tick); myTimer .Start(); } void Timer_Tick(object sender, EventArgs e) { int idleTime= (int)Win32.GetIdleTime(); if (idleTime<certainNumber) { //do this } }
public MainWindow() { InitializeComponent(); ComponentDispatcher.ThreadIdle += new System.EventHandler(ComponentDispatcher_ThreadIdle); } void ComponentDispatcher_ThreadIdle(object sender, EventArgs e) { //do your idle stuff here }
请参阅此答案: Application.Idle事件未在WPF应用程序中触发
ComponentDispatcher.ThreadIdle是您要查找的事件。
订阅SENS活动怎么样?
这是另一个链接 。
-
对于这种情况,我们需要一个
Timer
,它会在一个时间timeinterval
后激活一些event
。 -
最重要的是,我们需要一个
callback / eventhandler
程序,每次在我们的应用程序中发生任何类型的任何活动时callback / eventhandler
它,以便我们知道我们的应用程序正在running
。
可以使用DispatcherTimer
处理点1。
可以使用public event CanExecuteRoutedEventHandler CanExecute;
来处理点2 public event CanExecuteRoutedEventHandler CanExecute;
。
完全放在一起:
MainWindow.xaml
xmlns:cmd =“clr-namespace:System.Windows.Input; assembly = Presentationcore”
MainWindow.xaml.cs
public partial class MainWindow: Window { DispatcherTimer timer = new DispatcherTimer(DispatcherPriority.ApplicationIdle); bool running = true; public MainWindow() { InitializeComponent(); timer.Interval = TimeSpan.FromSeconds(5); timer.Tick += timer_Tick; timer.Start(); } private void CommandBinding_CanExecute_1(object sender, CanExecuteRoutedEventArgs e) { running = true; e.CanExecute = true; } void timer_Tick(object sender, EventArgs e) { if (!running) App.Current.Shutdown(); running = false; } }
我们可以轻松扩展这种方法以满足我们的需求。