При запуске консольного приложения, операционная система автоматически связывает 3 потока ВВОДА-ВЫВОДА с консолью: стандартный входной поток, стандартный поток вывода и стандартный поток вывода ошибок. Приложение может считывать введённые пользователем данные из стандартного входного потока, записывать обычные данные в стандартный выходной поток и записывать данные об ошибках в стандартный поток сообщений об ошибках. Эти потоки представлены в приложении значениями свойств Console.In, Console.Out и Console.Error.
По умолчанию значением свойства In является объект System.IO.TextReader, а значениями свойств Out и Error — объектыSystem.IO.TextWriter.Однако имеется возможность связать эти свойства с потоками, не представляющими консоль, например с потоками, представляющими файлы. Чтобы перенаправить стандартный ввод, стандартный вывод или стандартный поток ошибки, вызовите соответствующий метод: Console.SetIn, Console.SetOut или Console.SetError. Синхронизированы операций ВВОДА-ВЫВОДА, которые используют эти потоки, и это означает, что несколько потоков могут чтения, или записи, потоки.
Члены класса Console, работающие правильно, когда базовый поток представляет консоль, могут выдавать исключение, если поток представляет, например, файл. Программа приложению перехватывать исключения System.IO.IOException при перенаправлении стандартный поток. Можно также использовать IsOutputRedirected, IsInputRedirected и свойства IsErrorRedirected определить перенаправляются ли стандартный поток перед выполнением операции, вызвавшей исключение System.IO.IOException.