Assembly assembly = Assembly.GetExecutingAssembly();
List<Type> types = assembly.GetTypes();
List<Type> childTypes = new List<Type>();
foreach (Type type in Types) {
foreach (Type interfaceType in type.GetInterfaces()) {
if (interfaceType.Equals(typeof([yourinterfacetype)) {
childTypes.Add(type)
break;
}
}
}
, Возможно, что-то как этот....
Другой, вероятно, более чистый способ сделать это - расширить TextWriter своим собственным, который ведет журнал туда, куда вы хотите.
Примечание: я не тестировал это.
public class ListBoxWriter : TextWriter
{
private ListBox list;
private StringBuilder content = new StringBuilder();
public ListBoxWriter(ListBox list)
{
this.list = list;
}
public override void Write(char value)
{
base.Write(value);
content.Append(value);
if (value == '\n')
{
list.Items.Add(content.ToString());
content = new StringBuilder();
}
}
public override Encoding Encoding
{
get { return System.Text.Encoding.UTF8; }
}
}
Вместо того, чтобы пытаться «захватить» текст, отправленный на консоль, я бы создал новый класс, который обрабатывает вывод для вас. Затем этот новый класс может записывать данные в консоль, а также в любое другое место, куда вы хотите.
Если вы используете класс .NET Debug, просто используйте два слушателя: ConsoleTraceListener и TextWriterTraceListener.
Чтобы сделать ваш существующий код работает, добавьте:
writer.Flush();
после вызовов Console.WriteLine ().