使用DispatcherTimer空闲时间 - 不工作

时间:2012-01-13 12:20:03

标签: wpf python-idle dispatchertimer

我在WPF中完成了一个应用程序,使用MvvM / Prism / Unity和Remote作为数据源。

我需要一个基本的东西,在win表单上非常简单,只需检查应用程序是否在几分钟后谜语,如果处于空闲状态,请锁定应用程序并显示登录屏幕。

在google上进行一些搜索后,我发现了一个使用DllImport的解决方案,另一个使用纯Wpf方法。

我不知道我,在我实现了Wpf方式之后(请查看下面的代码)它只有在我登录到应用程序后才有效,如果我打开并点击一个简单的texbox或点击搜索,那么空闲方法并没有被解雇,看起来在背景中有一些东西被绞死,这使得Wpf空闲例行程序认为它不会做什么。

如何查看与may app相关的内存中的所有服务/方法/等等? callstack对我来说并不显示。我很害怕或者我没有以正确的方式调用远程服务或者我在道具PropChanged events / observablecollections / etc上实现了错误......

使用100%Wpf结构有更好的方法吗?

private void CheckIdleTime()
{

    handler = delegate
    {
        DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(5);
        timer.Tick += delegate
        {
            if (timer != null)
            {
                timer.Stop();
                timer = null;
                System.Windows.Interop.ComponentDispatcher.ThreadIdle -= handler;

                Console.WriteLine("IDLE! Lets logoff!");

                this.LockApplication();

                Console.WriteLine("logoff fired");

                System.Windows.Interop.ComponentDispatcher.ThreadIdle += handler;
            }

        };

        timer.Start();


        Dispatcher.CurrentDispatcher.Hooks.OperationPosted += delegate
        {
            if (timer != null)
            {
                timer.Stop();
                timer = null;
            }
        };
    };

    ComponentDispatcher.ThreadIdle += handler;
}

1 个答案:

答案 0 :(得分:1)

将会有默认窗口事件找到空闲时间...我认为如果我们为wpf或任何其他应用程序使用相同的事件将是明智的...

以下链接将帮助您实施它。

Application.Idle event not firing in WPF application