Я пытаюсь создать приложение Kinect + WPF. Часть Kinect работает отлично; Теперь я хочу создать метод, чтобы проверить, простаивает ли страница (ни один пользователь не взаимодействует с программой в течение определенного периода времени). Если он не используется в течение 5 секунд, экран будет заблокирован. Это алгоритм:
- Начать поток (мне нужно использовать Dispatcher, поскольку поток должен изменять элементы WPF)
- Проверьте, использует ли пользователь. Если нет, то увеличьте счет на 1.
- Если счет == 9 (что означает, что уже прошло 5 секунд), заблокируйте экран и снова установите для счетчика значение 0.
- Сон в течение 500 миллисекунд.
- Повторите шаг 2-4
Это мой код. Метод startLockHandler вызывается при запуске приложения.
public void startLockHandler()
{
Application.Current.Dispatcher.BeginInvoke(new ThreadStart(() => lockHandler()), null);
}
public void lockHandler()
{
while (true)
{
if (myState.isSkeletonTracked == false) //if skeleton is no longer tracked
{
if (myState.ActionAllowed == true) //if the page is not in transition
{
lockCount++;
if (lockCount >= 10)
{
lockCount = 0;
myState.ActionAllowed = false;
//LOCKING MECHANISM INSERTED HERE. NEED TO MODIFY SOME WPF ELEMENTS
myState.ActionAllowed = true;
}
}
}
else
{
lockCount = 0;
}
Console.WriteLine("lockHandler: THREAD SLEEP CALLED");
Thread.Sleep ( 500 );
}//end while
}//end method lockHandler
Когда я запускаю приложение, оно зависает сразу после его запуска. Мне кажется, что Thread.Sleep (500) инструктирует основной поток спать (пожалуйста, исправьте меня, если я ошибаюсь). У меня вопрос, как я могу указать, какую нить нужно усыпить?
Кстати, я не эксперт в C # и новичок в Threading: (
Спасибо за внимание и, надеюсь, вы мне поможете:)