У меня есть приложение, выполненное в WPF, использующее MvvM / Prism / Unity и Remote в качестве источника данных.
Мне нужна базовая вещь, которая в win-формах действительно проста, просто проверьте, простаивает ли приложение через несколько минут, а если не используется, заблокируйте приложение и покажите экран входа в систему.
После некоторых поисков в Google я нашел одно решение, которое использует DllImport, а другое - методы чистого Wpf.
Я не знаю, что после того, как я реализовал способ Wpf (пожалуйста, проверьте код ниже), он работает только после того, как я войду в приложение, если я открою и нажму в простом текстовом поле или нажму на поиск, метод ожидания не запускается, похоже, что на заднем плане висит что-то, что заставляет Wpf бездействовать и думать, что оно что-то делает, когда это не так.
Как я могу проверить все службы / методы / и т.д .., которые находятся в памяти, связанные с приложением may? 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;
}