Вы можете использовать Windows Task Scheduler и зарегистрировать задачу, которая запускается, когда система находится в режиме ожидания.Это лучший способ, так как не так очевидно определить бездействие системы (по крайней мере, прочитайте статью, чтобы понять, что это значит).Вы также можете защитить задачу с помощью безопасности и т. Д. Подробнее об этом см. Здесь: Условия простоя задачи
Для программирования планировщика задач в C # вы можете использовать различные оболочки.Вот хотя бы один из них: Управляемый оболочкой планировщика заданий