-1

我尝试编写此代码以在后台工作人员工作时更新文本框的文本。

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

什么错误???

谢谢!

4

1 回答 1

0

如果我理解你的话,后台线程不能直接操作 UI 控件。如果您使用的是 WPF,您可以尝试使用 Dispatcher。与其创建自己的线程,不如为后台工作做这样的事情

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

希望这会有所帮助。

于 2013-05-28T21:08:59.533 回答