У меня есть интересная дилемма, где мое приложение может работать как консольное приложение или приложение Windows Forms.Перенаправление потока в текстовое поле в реальном времени
Поскольку я не хочу, чтобы написать пролитой нагрузку кода, как это во всем моем приложении:
If (IsConsoleApp())
{
// process Console input and output
}
else
{
// process Windows input and output
}
Чтобы предотвратить это, я решил создать два метода, где я могу передать в TextReader и TextWriter экземпляр и впоследствии использовать их для обработки ввода и вывода, например
public void SetOutputStream(TextWriter outputStream)
{
_outputStream = outputStream;
}
public void SetInputStream(TextReader inputStream)
{
_inputStream = inputStream;
}
// To use in a Console App:
SetOutputStream(Console.Out);
SetInputStream(Console.In);
Чтобы отобразить текст в окне консоли я просто нужно сделать что-то вроде этого:
_outputStream.WriteLine("Hello, World!");
И текст волшебно перенаправляется в консоль.
Теперь, моя проблема в том, как я могу сделать что-то подобное для приложения Windows? Я создал форму с текстовым полем для чтения только для чтения, и я хочу, чтобы содержимое _outputStream
было перенаправлено на это текстовое поле в режиме реального времени.
Кроме того, я хочу, чтобы _inputStream
содержал содержимое другого элемента управления текстовым полем, чтобы мое приложение могло читать из этого потока вместо текстового поля напрямую.
Заранее спасибо.
Это разумный дизайн. В инфраструктуру встроены никакие потоки, которые напрямую подключаются к текстовым полям, но вы можете легко реализовать свой собственный подкласс. И, вероятно, есть сторонние решения с множеством функций. –
Возможный дубликат [Bind Console Output to RichEdit] (http://stackoverflow.com/questions/3744668/bind-console-output-to-richedit) –
@HansPassant Я взглянул на указанную вами ссылку и в основном перенаправляет вывод консоли в текстовое поле, что не то, что я ищу. Я хочу приложить поток к текстовому блоку, чтобы в текстовом поле автоматически появлялась любая запись в поток. – Intrepid