我尝试编写此代码以在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);
错误是什么???
谢谢!
答案 0 :(得分:0)
如果我帮到你,那么背景线程无法直接操作UI控件。如果您使用的是WPF,则可以尝试使用Dispatcher。而不是创建自己的线程为后台工作做这样的事情
Object[] args = {path.FullName, true };
this.Dispatcher.BeginInvoke(delegateTextBox, args);
希望这会有所帮助。