Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将控制台输出从另一个线程重定向到listbox会引发InvalidOperationException_C#_Wpf_Multithreading_Listbox - Fatal编程技术网

C# 将控制台输出从另一个线程重定向到listbox会引发InvalidOperationException

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

我试图将控制台输出重定向到一个列表框,但当我从另一个线程向控制台写入文本时,它会引发InvalidOperationException

ListBoxWriter:

    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”)