C# 将控制台输出从另一个线程重定向到listbox会引发InvalidOperationException
我试图将控制台输出重定向到一个列表框,但当我从另一个线程向控制台写入文本时,它会引发InvalidOperationException ListBoxWriter:C# 将控制台输出从另一个线程重定向到listbox会引发InvalidOperationException,c#,wpf,multithreading,listbox,C#,Wpf,Multithreading,Listbox,我试图将控制台输出重定向到一个列表框,但当我从另一个线程向控制台写入文本时,它会引发InvalidOperationException ListBoxWriter: public class ListBoxWriter : TextWriter { private ListBox list; private StringBuilder content = new StringBuilder(); public ListBoxWri
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; }
}
}
您正在从另一个线程访问UI,这意味着您在将项目添加到列表时必须使用dispatcher
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.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => list.Items.Add(content.ToString())));
content = new StringBuilder();
}
}
public override Encoding Encoding
{
get { return System.Text.Encoding.UTF8; }
}
}
你的线程在哪里?@Kyle my thread不使用任何代码,只使用
Console.writeline(“text”)