Вы на самом деле не хотите запрашивать, является ли Windows заблокированным , вместо этого вы хотите запросить, является ли ваше приложение видимым - нет смысла обновлять ваши данные, если окно свернуто или закрыто другим окном, верно?
Стандартный способ сделать это - использовать таймер и сделать окно недействительным. Используйте класс Timer , чтобы запланировать таймер на 2 минуты в будущем. Когда таймер срабатывает, сделайте недействительным ваше окно через Form.Invalidate () .
Когда вы сделаете недействительным окно, Windows отправит ему сообщение «рисовать». В обработчике OnPaint
вы обновляете экран своими данными. Но вот что важно: если ваше окно не видно, Windows не запустит событие OnPaint
(в том числе, если экран в данный момент заблокирован)!
Теперь ваш запрос к базе данных, вероятно, слишком дорог для выполнения в обработчике событий OnPaint
, поэтому вам, возможно, придется сделать что-то хитрое в вашем обработчике таймера. Например, вы можете выполнить запрос к базе данных в вашем обработчике таймера и затем call Form.Invalidate()
. Это означает, что когда вы возвращаетесь с блокировки экрана, ваши данные могут быть устаревшими, поэтому вы можете проверить, значительно ли отличается DateTime.Now
между обработчиком таймера и обработчиком OnPaint
и запланировать еще один таймер. прочь, если это так. В противном случае запланируйте повторный запуск таймера через 2 минуты после вашего обратного вызова OnPaint
.
Надеюсь, все это имеет смысл:)