Поскольку большинство приложений Windows управляются пользовательским интерфейсом, а пользовательский интерфейс Windows управляется извлечением сообщений из очереди сообщений, один из распространенных способов определить, когда приложение находится в режиме ожидания, - это отсутствие сообщений в своей очереди сообщений.
В приложении Windows всегда есть сообщения (генерируемые пользователем и системой), но в типичном приложении вы часто увидите короткие периоды простоя. Когда мышь перемещается над окном в вашем приложении, ваши периоды простоя будут уменьшаться до нуля, пока мышь не перестанет двигаться, потому что активность мыши генерирует большую активность сообщений.
Итак, в цикле сообщений вашего приложения Windows, если вы в настоящее время используете GetMessage, вам нужно будет изменить цикл, чтобы использовать вместо него PeekMessage. GetMessage блокируется, когда очередь сообщений пуста, пока не прибудет сообщение. PeekMessage возвращает true, если в очереди есть сообщение, или false, если его нет. С помощью флагов вы можете заставить PeekMessage получать сообщение в одном вызове.
Когда PeekMessage возвращает значение false, вы можете перенаправить выполнение на вашу «бездействующую» задачу вместо ожидания следующего сообщения.
В приложениях WinForms используйте событие Application.Idle
Не делайте слишком много в своём бездействующем коде, иначе ваш интерфейс будет вялым, потому что сообщения не обрабатываются быстро. Чрезмерное использование цикла простоя также заставит ваш процессор сильно нагреваться и разряжать батарею вашего ноутбука.