将控制台输出从另一个线程重定向到列表框会引发 InvalidOperationException

本文关键字:列表 InvalidOperationException 重定向 输出 控制台 另一个 线程 | 更新日期: 2023-09-27 18:30:21

我正在尝试将控制台输出重定向到列表框,但是当我从其他线程将文本写入控制台时,它会抛出 InvalidOperationException

列表框编写器:

    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; }
        }
    }

将控制台输出从另一个线程重定向到列表框会引发 InvalidOperationException

您正在从另一个线程访问 UI,这意味着在将项目添加到列表时必须使用调度程序。

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; }
        }
    }