Я пытаюсь заставить свое приложение приостанавливаться на девять-десять минут в начале каждого часа.
Мне удалось приостановить приложение на это время.
Random waitTime = new Random();
int milliseconds = waitTime.Next(3000, 5000);
System.Threading.Thread.Sleep(milliseconds);
Я сократил время в своем коде для целей тестирования.
Теперь мне нужно связать это с чем-то, что проверяет, находится ли текущее время между (4:00, 4:10) или (5:00, 5:10) или (21:00, 1:00), и возобновляет, если оно не является.
Вам нужен код для паузы на десять минут, или его можно перефразировать так: что бы он ни делал, вам нужно делать это только в последние 50 минут каждого часа?
Вы используете планировщик.
Я бы любой ценой избегал использования Thread.Sleep. Используйте планировщик, например Quartz.
@BrootsWaymb Почему?
Среда, в которой я работаю, очень ограничена, я не могу использовать планировщик. @Генерал
Я также относительно новичок в кодировании, поэтому я не знаю, как реализовать Quartz @WilliamXifaras
@ScottHannen Да, это тоже сработает
Относительно новичок в кодировании - это не проблема, любой может решить что угодно
@BrootsWaymb Я не знаю, что еще делать, я новичок в кодировании. Мне удалось собрать это вместе из нескольких разных сообщений здесь.
@TheGeneral Верно, но я подумал, что будет проще и быстрее спросить кого-нибудь. Обычно я так делаю, когда не в своей тарелке.
Это часть большой программы, я использую чужую работу. Они добавили место для пользовательского кода, написанного на C#. Я пытаюсь добавить функции, которые я хочу.
@WilliamXifaras Похоже, это работает только в приложениях Java. Я пытаюсь создать сценарий С#, который выполняет это.
Это не только Ява. Найдите Quartz.NET. Выполнение чего-либо только в разрешенное время — вот почему существуют эти планировщики.
@shad Потому что весь поток останавливается. Если ваше приложение не имеет встроенной многопоточности, интерфейс также перестанет отвечать.
Если вы хотите продолжить свой текущий шаблон использования Thread.Sleep(n)
, можете использовать простой цикл.
while (DateTime.Now.Minute <=10)
{
Thread.Sleep(1000);
}
В общем, было бы лучше запланировать задачу или, по крайней мере, использовать асинхронность вместо блокировки потока.
Когда я пытаюсь скомпилировать это, я получаю сообщение об ошибке: «Ststem.DateTime» не содержит определения «Минуты», и не может быть найден метод расширения «Минуты», принимающий первый аргумент типа «System.DateTime». (вам не хватает директивы использования или ссылки на сборку?
Изменено "минуты" на "минуты"
Что вы на самом деле делаете со своим приложением? Не могли бы вы предоставить какой-то фоновый контекст? В 99% случаев
Thread.Sleep
— это неправильный способ заниматься подобными вещами, и я обычно не советую этого делать.