c#创建委托时出现的错误是什么?

本文关键字:错误 是什么 创建 | 更新日期: 2023-09-27 18:15:59

我试图写这段代码来更新textBox的文本,而backgroundworker正在工作。

#region variables
        public delegate void updateTextBoxDelegate(string s, bool directory);
        updateTextBoxDelegate delegateTextBox;
#endregion
#region somewhereInsideForm1Constructor
        delegateTextBox = new updateTextBoxDelegate(updateTextBox);
#endregion
#region methods
        public void updateTextBox(string s, bool directory)
        {
            if (directory)
            {
                textBox1.Text += s + System.Environment.NewLine;
            }
            else
            {
                textBox1.Text += "   --> " + s + System.Environment.NewLine;
            }
        }
#endregion

#region somewhereInsideBackGroundWorker_doWork
       delegateTextBox(path.FullName, true);
#endregion

,在这种情况下会出现一个异常的交叉线程:

:

      textBox1.Text += s + System.Environment.NewLine;

:

      delegateTextBox(path.FullName, true);

错误是什么??

谢谢!

c#创建委托时出现的错误是什么?

如果我说得好,后台线程不能直接操作UI控件。如果您正在使用WPF,您可以尝试使用Dispatcher。不要创建自己的线程,为后台工作执行以下操作

Object[] args = {path.FullName, true };
this.Dispatcher.BeginInvoke(delegateTextBox, args);