我一直在寻找最好的方法来找出我的用户是否在我的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
}
}
答案 0 :(得分:12)
public MainWindow()
{
InitializeComponent();
ComponentDispatcher.ThreadIdle += new System.EventHandler(ComponentDispatcher_ThreadIdle);
}
void ComponentDispatcher_ThreadIdle(object sender, EventArgs e)
{
//do your idle stuff here
}
答案 1 :(得分:3)
看到这个答案: Application.Idle event not firing in WPF application
ComponentDispatcher.ThreadIdle是您要查找的事件。
答案 2 :(得分:1)
对于此类情况,我们需要一个Timer
,在event
之后会激活一些timeinterval
。
最重要的是,我们需要一个callback / eventhandler
,每当我们的应用程序中发生任何类型的任何活动时都会调用它,以便我们知道我们的应用程序是running
。
可以使用DispatcherTimer
处理第1点。
可以使用public event CanExecuteRoutedEventHandler CanExecute;
处理第2点。
完全放弃:
<强> MainWindow.xaml 强>
的xmlns:CMD =&#34; CLR-名称空间:System.Windows.Input; 装配= Presentationcore&#34;
<!-- a do nothing button -->
<Button Command="{x:Static cmd:NavigationCommands.BrowseBack}" Visibility="Collapsed">
<Button.CommandBindings>
<!-- we can use any pre-defined / user-defined command -->
<CommandBinding Command="{x:Static cmd:NavigationCommands.BrowseBack}" CanExecute="CommandBinding_CanExecute_1"/>
</Button.CommandBindings>
</Button>
<强> 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;
}
}
我们可以轻松扩展这种方法以满足我们的需求。
答案 3 :(得分:0)
如何订阅SENS个活动?
这是another link。