如何在不活动'n'秒后关闭WPF应用程序?n秒钟不活动后关闭WPF应用程序
2
A
回答
14
有点晚了,但我想出了这个代码,它将重新启动一个计时器上的任何输入事件:
public partial class Window1 : Window {
DispatcherTimer mIdle;
private const long cIdleSeconds = 3;
public Window1() {
InitializeComponent();
InputManager.Current.PreProcessInput += Idle_PreProcessInput;
mIdle = new DispatcherTimer();
mIdle.Interval = new TimeSpan(cIdleSeconds * 1000 * 10000);
mIdle.IsEnabled = true;
mIdle.Tick += Idle_Tick;
}
void Idle_Tick(object sender, EventArgs e) {
this.Close();
}
void Idle_PreProcessInput(object sender, PreProcessInputEventArgs e) {
mIdle.IsEnabled = false;
mIdle.IsEnabled = true;
}
}
1
1
在msdn social有关于此事的讨论。检查它,请张贴的内容为你所做的工作....
我粘贴从讨论的代码(一个我认为它会做你的需要):
public partial class Window1 : Window
{
private EventHandler handler;
public Window1()
{
InitializeComponent();
handler = delegate
{
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(4);
timer.Tick += delegate
{
if (timer != null)
{
timer.Stop();
timer = null;
System.Windows.Interop.ComponentDispatcher.ThreadIdle -= handler;
MessageBox.Show("You get caught!");
System.Windows.Interop.ComponentDispatcher.ThreadIdle += handler;
}
};
timer.Start();
//System.Windows.Interop.ComponentDispatcher.ThreadIdle -= handler;
Dispatcher.CurrentDispatcher.Hooks.OperationPosted += delegate
{
if (timer != null)
{
timer.Stop();
timer = null;
}
};
};
ComponentDispatcher.ThreadIdle += handler;
}
}
+1
ComponentDispatcher.ThreadIdle正在被正确触发,但Dispatcher.CurrentDispatcher.Hooks.OperationPosted正在抽取事件,即使我最小化实质上停止计时器的Window。 – Raj 2010-03-02 13:27:50
0
public MainWindow()
{
InitializeComponent();
var timer = new DispatcherTimer {Interval = TimeSpan.FromSeconds(10)};
timer.Tick += delegate
{
timer.Stop();
MessageBox.Show("Logoff trigger");
timer.Start();
};
timer.Start();
InputManager.Current.PostProcessInput += delegate(object s, ProcessInputEventArgs r)
{
if (r.StagingItem.Input is MouseButtonEventArgs || r.StagingItem.Input is KeyEventArgs)
timer.Interval = TimeSpan.FromSeconds(10);
};
}
+0
如果要在某些预处理后启用自动注销事件,请将此代码行保留在主窗口构造函数或表单加载事件中。 – sam 2014-08-26 22:52:19
相关问题
- 1. 几秒钟后在Windows Mobile应用程序上关闭MessageBox(C#)
- 2. 蝙蝠文件5分钟不活动后关闭程序
- 3. 自动关闭WPF应用程序
- 4. 几秒钟后应用程序崩溃
- 5. 几秒钟后应用程序崩溃
- 6. ACM1602B-FL-YBW在几秒钟后关闭
- 7. WPF应用程序在一段时间后自动关闭
- 8. 应用程序关闭后,返回到相同的活动
- 9. 屏幕关闭后保持应用程序活动
- 10. n秒后关闭组合框
- 11. 。用java启动的.msi文件在几秒钟后关闭。
- 12. UWP应用程序在启动后几秒钟内崩溃
- 13. NSURLErrorDomain代码= -1004几秒钟后,应用程序启动
- 14. VBA MSGBOX关闭在不到一秒钟
- 15. Android应用程序在关闭主要活动时不会关闭
- 16. 如何在关闭wpf应用程序时关闭所有后台进程
- 17. 保持WPF应用程序活着关闭
- 18. RaceOnRCWCleanup当关闭WPF应用程序
- 19. 从App.xaml.cs中关闭WPF应用程序
- 20. WPF应用程序未正确关闭
- 21. 守护线程在关闭应用程序后仍然活着
- 22. 单击按钮而不是返回主活动后,应用程序关闭
- 23. 关闭应用程序后,它会自动启动第二项活动?
- 24. 当闹钟在自定义闹钟应用程序中关闭时启动自定义活动Android
- 25. 应用程序强制关闭在启动导航栏活动
- 26. 当WPF应用程序关闭时关闭非托管资源
- 27. 启动应用程序,然后在关闭应用程序后恢复
- 28. WPF应用程序仍然在后台运行关闭
- 29. 主窗体关闭后WPF应用程序未被卸载
- 30. 关闭程序后重新启动应用程序
最近我发现了一个问题:当文本框聚焦并且鼠标悬浮在窗口上时,PreProcessInput事件不断发射。当您将鼠标移动到窗口外或将焦点从文本框移开时,它可以正常工作。这是我做错了什么吗? – PVitt 2010-07-29 09:22:16
仅供参考:我试过你的解决方案,并且无法准确理解何时引发'PreProcessInput'事件。你可以在这里找到我的问题:http://stackoverflow.com/questions/4963135/wpf-inactivity-and-activity – 2011-02-11 13:14:35
@Martin,我不知道,WPF对象模型太复杂了。我认为你必须通过PreProcessInputEventArgs对象和转储信息来了解它来自哪里。然后你也可以过滤它。 – 2011-02-11 13:28:37