I was looking for the best approach to find out the if my users are idle in my WPF application. Currently, I take this idle time from operating system, and if they minimize
For such scenarios, we need a Timer which fires back some event after a timeinterval.
And most importantly, we need a callback / eventhandler which gets called everytime any activity of any kind happens in our application, so that we know that our application is running.
Point 1 can be handled using DispatcherTimer.
Point 2 can be handled using public event CanExecuteRoutedEventHandler CanExecute; .
Putting it altogether :
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;
}
}
We can easily extend this approach to fit our needs.