创建DELEGATE C#时出错的是什么

时间:2013-05-28 20:03:02

标签: c# .net multithreading delegates

我尝试编写此代码以在backgroundworker工作时更新textBox的文本。

#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);

错误是什么???

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我帮到你,那么背景线程无法直接操作UI控件。如果您使用的是WPF,则可以尝试使用Dispatcher。而不是创建自己的线程为后台工作做这样的事情

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

希望这会有所帮助。