Я нашел очень простой и элегантный способ направить вывод консоли в текстовое поле по этой ссылке , но сейчас я не нахожу способ реализовать его в своем классе докладчика, чтобы он работал везде, где я нужно это. Это означает, что в основном потоке, но также и во всех классах, инициированных в основном потоке.
Проблема в том, что класс, который я нашел в Интернете, имеет элемент управления (текстовое поле), в который направляется вывод. В моем классе докладчика я не могу определить элементы управления. Поэтому, когда я запускаю поток докладчика, который затем запускает форму, в которой я определил TextWriter, выходные данные, сгенерированные в форме, записываются в текстовое поле, как и ожидалось, но всякий раз, когда я Console.Writeline в презентаторе или в других случаях, созданных в докладчик, то он все еще направляется в стандартное окно вывода отладки ...
Я относительно новичок в модели MVC, как вы уже могли видеть. :)
Итак, TextBoxStreamWriter:
public class TextBoxStreamWriter : TextWriter
{
TextBox _output ;
public TextBoxStreamWriter(TextBox output)
{
_output = output;
}
public override void Write(char value)
{
MethodInvoker action =
delegate
{
_output.AppendText(value.ToString());
};
_output.BeginInvoke(action);
}
public override Encoding Encoding
{
get { return System.Text.Encoding.UTF8; }
}
}
В моем классе докладчика:
public MTMainPresenter(IMTMainForm view)
{
_view = view;
HandleShizzle();
Console.Writeline("Presenter initialized :( "); // << Doesn't work as I want it to...
}
program.cs:
private static MTMainPresenter _presenter;
static void Main()
{
var mainForm = new MTMainForm();
_presenter = new MTMainPresenter(mainForm);
Application.Run(mainForm);
}
В моем form:
TextWriter _writer = null;
private void Form1_Load(object sender, EventArgs e)
{
_writer = new TextBoxStreamWriter(txtboxConsole);
Console.SetOut(_writer);
Console.Writeline("Yay !"); // << Works fine, the way I want it to
}
Итак, я создал тестовую кнопку в форме, которая сгенерировала Console.WriteLine (), и это работает просто отлично. Но когда я делаю то же самое в моем докладчике, он пишет в стандартное окно отладки. Я уже пытался инициализировать TextWriter в классе Procgram.cs, но так как он имеет элемент управления TextBox, который должен быть назначен, я немного растерялся, как решить эту проблему ...
Я Я уверен, что это так легко исправить, но мне не хватает опыта.
Заранее большое спасибо P