+ -
当前位置:首页 → 问答吧 → BackgroundWorker调用控件的方法?

BackgroundWorker调用控件的方法?

时间:2011-12-14

来源:互联网

向Form中拖入一个BackgroundWorker(Name:backgroundWorker1),
backgroundWorker1_DoWork的内容是:C# code
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    label1.Text = "OK";
}


Form中button1的Click:C# code
private void button1_Click(object sender, EventArgs e)
{
    backgroundWorker1.RunWorkerAsync();
}



点击按钮button1出现错误:“线程间操作无效: 从不是创建控件“label1”的线程访问它。”
我对线程不太懂,请指点一下BackgroundWorker调用控件的方法。

作者: liubococoa   发布时间: 2011-12-14

CheckForIllegalCrossThreadCalls = false;

作者: tjw687492   发布时间: 2011-12-14

引用 1 楼 tjw687492 的回复:
CheckForIllegalCrossThreadCalls = false;

不是说BackgroundWorker可以解决“线程间控件操作”的问题吗?
我也是想解决Timer的方法中无法实现“线程间控件操作”,才试BackgroundWorker的。

作者: liubococoa   发布时间: 2011-12-14

当你调用 backgroundWorker1.RunWorkerAsync(); 方法之后,
控件将会新建一个线程 执行 backgroundWorker1_DoWork 的 代码,而label1 控件并不是在这个新建的线程中创建的 所以调试的时候报错。因该在backgroundWorker1_ProgressChanged的方法里 执行你需要更新 界面的代码。

 

作者: fyydnr   发布时间: 2011-12-14

触发事件 ProgressChanged,之后 就会回到 主线程上 执行backgroundWorker1_ProgressChanged里的代码,

作者: fyydnr   发布时间: 2011-12-14