Какие опции у меня есть для долго выполняющихся процессов в моем C # Консольном приложении? - PullRequest
1 голос
/ 07 января 2012

Я работаю над консольным приложением, которое запускает довольно длительный процесс (2-3 минуты). Какие параметры доступны для отображения прогресса, или даже просто написать «.» просматривать каждые несколько секунд, чтобы пользователь знал, что приложение не перестало отвечать? Я новичок в разработке десктопов, так что терпите меня. Спасибо!

Ответы [ 2 ]

1 голос
/ 07 января 2012

У вас есть (как минимум) 3 способа сделать это:

  • Простейший: при запуске программы задайте для глобальной переменной значение false, а затем запустите поток, который записывает точку в консоль, Thread.Sleep () с, повторяется, пока для переменной не будет задано значение true. В основном потоке выполняйте свою работу, когда закончите, установите для переменной значение true, а затем Join () для другого потока.
  • Все еще просто: добавьте еще одну глобальную переменную в микс, введите int. В вашем рабочем потоке увеличивайте его всякий раз, когда достигается какой-то прогресс, в потоке пишущей консоли сокращайте интервал до 250 мс, но рисуйте точку, только если счетчик прогресса изменился. Это дает представление о том, как быстро ваше приложение прогрессирует
  • Немного продвинутый: создайте логическое значение, как в первом шаге, плюс AutoResetEvent, позвольте потоку консоли записи многократно ожидать событие, когда приложение выполняет прогресс Set () событие. По окончании установите boolean в true и снова установите () перед Join () ing. Продвинутая часть в этом состоит в том, чтобы знать, в каких частях сообщать о прогрессе.
0 голосов
/ 07 января 2012

Самый простой подход состоит в том, что если ваше приложение имеет инкрементный цикл, вы можете просто поставить точку на консоли.Не очень хорошо, но он показывает «Я жив».

Но такой подход может привести к тому, что слишком много информации (слишком много символов будет отправлено на консоль) или слишком мало, так как вы зацепите немногокод, который на самом деле не несет такой ответственности.

Итак, возможно, более удачный способ повторного использования - создать пользовательский класс консоли, который запускается в потоке с 1-секундной отметкой.Он может использовать backspace и старый добрый |/ |/ - последовательность, чтобы создать впечатление чего-то вращающегося.Он также может проверять нажатия клавиш, чтобы позволить пользователю выйти.

Другой вариант, в зависимости от характера ваших пользователей, заключается в использовании каркаса ведения журналов, например NLog .Таким образом, ваша реализация не зависит от пользовательского интерфейса, и вы можете увидеть, что происходит более или менее подробно во время выполнения, в консоли, с другой машины и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...