Console readkey c что это

У меня есть программа, которая вызывает функцию Filewatcher, например

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

В этот момент у меня возникают некоторые странные проблемы, такие как программа требует двух ключевых входов для продолжения. Я предполагаю, что это потому, что console.readkey из before все еще ждет ввода, поэтому первый вход идет туда, а затем второй вход идет на второй console.readkey.

Итак, мой вопрос в том, что при первом запуске filewatcher я могу через код передать что-то на консоль .readkey, ожидающий ввода пользователя?

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

Похоже, что вам в этой ситуации нужно изменить свою логику, чтобы просто цикл бесконечно (или до тех пор, пока не будет достигнуто какое-либо другое условие). Вместо использования Console.ReadKey , чтобы предотвратить завершение работы приложения, вы должны подумать о повторной записи его как:

Это заставит программу работать "навсегда", пока вы не установите для параметра exitProgram значение true, после чего он будет нормально работать. "Часы" не будут вызываться постоянно, так как resetEvent будет блокироваться бесконечно. Когда ваша "работа" завершится (после завершения обработчика событий FileSystemWatcher), вызовите resetEvent.Set() . Это заставит цикл повторить еще раз, повторно запуская ваш код часов.

Работает с помощью AutoResetEvent, чтобы предотвратить повторную проверку наблюдателем одного и того же файла.

Структура вашего консольного приложения должна быть изменена для использования WaitHandle и Ctrl + C для выхода из программы. Ниже приведена базовая структура такой программы. Для преобразования в С# должно быть тривиально.

Для вывода информации на консоль мы уже использовали встроенный метод Console.WriteLine . То есть, если мы хотим вывести некоторую информацию на консоль, то нам надо передать ее в метод Console.WriteLine:

Нередко возникает необходимость вывести на консоль в одной строке значения сразу нескольких переменных. В этом случае мы можем использовать прием, который называется интерполяцией:

Для встраивания отдельных значений в выводимую на консоль строку используются фигурные скобки, в которые заключается встраиваемое значение. Это можем значение переменной ( ) или более сложное выражение (например, операция сложения <4 + 7>). А перед всей строкой ставится знак доллара $.

При выводе на консоль вместо помещенных в фигурные скобки выражений будут выводиться их значения:

Есть другой способ вывода на консоль сразу нескольких значений:

Этот способ подразумевает, что первый параметр в методе Console.WriteLine представляет выводимую строку ("Имя: <0>Возраст: <2>Рост: <1>м"). Все последующие параметры представляют значения, которые могут быть встроенны в эту строку (name, height, age). При этом важен порядок подобных параметров. Например, в данном случае вначале идет name, потом height и потом age. Поэтому у name будет представлять параметр с номером 0 (нумерация начинается с нуля), height имеет номер 1, а age — номер 2. Поэтому в строке "Имя: <0>Возраст: <2>Рост: <1>м" на место плейсхолдеров <0>, <2>, <1>будут вставляться значения соответствующих параметров.

Кроме Console.WriteLine() можно также использовать метод Console.Write() , он работает точно так же за тем исключением, что не осуществляет переход на следующую строку.

Консольный ввод

Кроме вывода информации на консоль мы можем получать информацию с консоли. Для этого предназначен метод Console.ReadLine() . Он позволяет получить введенную строку.

В данном случае все, что вводит пользователь, с помощью метода Console.ReadLine передается в переменную name.

Пример работы программы:

Таким образом мы можем вводить информацию через консоль. Однако минусом этого метода является то, что Console.ReadLine считывает информацию именно в виде строки. Поэтому мы можем по умолчанию присвоить ее только переменной типа string. Как нам быть, если, допустим, мы хотим ввести возраст в переменную типа int или другую информацию в переменные типа double или decimal? По умолчанию платформа .NET предоставляет ряд методов, которые позволяют преобразовать различные значения к типам int, double и т.д. Некоторые из этих методов:

Convert.ToInt32() (преобразует к типу int)

Convert.ToDouble() (преобразует к типу double)

Convert.ToDecimal() (преобразует к типу decimal)

Пример ввода значений:

При вводе важно учитывать текущую операционную систему. В одних культурах разделителем между целой и дробной частью является точка (США, Великобритания. ), в других — запятая (Россия, Германия. ). Например, если текущая ОС — русскоязычная, значит, надо вводить дробные числа с разделителем запятой. Если локализация англоязычная, значит, разделителем целой и дробной части при вводе будет точка.

Метод Console.ReadKey () заставляет программу ждать нажатия клавиши и предотвращает экран до нажатия клавиши. Короче говоря, он получает следующий символ или любую клавишу, нажимаемую пользователем. Нажатая клавиша отображается в окне консоли (если произойдет какой-либо процесс ввода). В списке перегрузки этого метода есть два метода:

  • Метод ReadKey ()
  • Метод ReadKey (логический)
  • Метод ReadKey ()

    Этот метод используется для получения следующего символа или функциональной клавиши, нажатой пользователем. Нажатая клавиша отображается в окне консоли.

    Синтаксис: public static ConsoleKeyInfo ReadKey ();

    Возвращаемое значение: Этот метод возвращает объект, который описывает константу ConsoleKey и символ Unicode (если есть), он соответствует нажатой клавише.

    Исключение: этот метод выдаст InvalidOperationException, если свойство In принадлежит какому-либо потоку, отличному от консоли. Свойство «In» используется для получения стандартного входного потока.

    Ниже программы иллюстрируют использование рассмотренного выше метода:

    Пример 1:

    ссылка на сайт
    brightness_4
    lang = "csharp" > code

    Выход:

    Пример 2:

    ссылка на сайт
    brightness_4
    код

    Выход:

    Пример 3:

    ссылка на сайт
    brightness_4
    код

    Выход:

    Метод ReadKey (логический)

    Этот метод больше похож на предыдущий метод, то есть он также получает следующий символ или любую клавишу, нажимаемую пользователем. Разница лишь в том, что нажатая клавиша дополнительно отображается в окне консоли.

    Синтаксис: открытая статическая ConsoleKeyInfo ReadKey (ключ bool);
    Здесь «клавиша» используется для определения, отображать ли нажатую клавишу в окне консоли. Если «true», то нажатая клавиша не будет отображаться в окне вывода. Если «ложь», то нажатая клавиша будет отображаться в окне вывода.

    Возвращаемое значение: Этот метод возвращает объект, который описывает константу ConsoleKey и символ Unicode (если есть), он соответствует нажатой клавише.

    Исключение: этот метод выдаст InvalidOperationException, если свойство In принадлежит какому-либо потоку, отличному от консоли. Свойство «In» используется для получения стандартного входного потока.

    Ниже программы иллюстрируют использование рассмотренного выше метода:


    [an error occurred while processing the directive]
    Карта сайта