向Form中拖入一个BackgroundWorker(Name:backgroundWorker1),
backgroundWorker1_DoWork的内容是:private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
label1.Text = "OK";
}Form中button1的Click:private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
点击按钮button1出现错误:“线程间操作无效: 从不是创建控件“label1”的线程访问它。”
我对线程不太懂,请指点一下BackgroundWorker调用控件的方法。
backgroundWorker1_DoWork的内容是:private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
label1.Text = "OK";
}Form中button1的Click:private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
点击按钮button1出现错误:“线程间操作无效: 从不是创建控件“label1”的线程访问它。”
我对线程不太懂,请指点一下BackgroundWorker调用控件的方法。
解决方案 »
- 这种情况该怎么办?
- [掌风贴]每天发帖即可得 30 可用分【别进】
- Microsoft Visual C#.net中如何控制最大化的布局?
- #############socket通信中,服务端如何正确截取客户端的每一个报文?#############
- 远程反序列化的问题????????
- 在类库文件里写方法,这个方法返回一个int的数组,这个数组是动态产生的,所以无法定义int数组的长度,你们一般怎么处理?返回什么类型的
- 求教WPF中TreeView绑定数据库后的双击问题
- VS程序入口路径问题?折腾了两天了快!!
- 如何在控件的属性中绑定其它的控件
- 终于可以下载Windows.Net RC1了!!!
- dataTabel排序问题
- Treeview 异步加载
我也是想解决Timer的方法中无法实现“线程间控件操作”,才试BackgroundWorker的。
控件将会新建一个线程 执行 backgroundWorker1_DoWork 的 代码,而label1 控件并不是在这个新建的线程中创建的 所以调试的时候报错。因该在backgroundWorker1_ProgressChanged的方法里 执行你需要更新 界面的代码。
private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker backgroundworker = sender as BackgroundWorker;
backgroundworker.ReportProgress(0);
} private void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
label1.Text = "OK";
}
private void button1_Click(object sender, EventArgs e)
{
[align=left][align=center]string tip=string.empty;
BackGroundworker worker=new BackGroundworker();worker.DoWork+=new DoWorkEventHandler((sender,e)=>
{
//ToDo
this.tip="OK";
});worker.ProgressChanged+= new ProgressChangedEventHandler((sender,e)=>
{
//ToDo->tip
});worker.RunWorkerCompleted+=new RunWorkerCompletedEventHandler((sender,e)=>
{
//ToDo->tip
});[/align][/align]
}
{
string tip=string.empty;
BackGroundworker worker=new BackGroundworker();
worker.DoWork+=new DoWorkEventHandler((sender,e)=>
{
//ToDo this.tip="OK";
}); worker.ProgressChanged+= new ProgressChangedEventHandler((sender,e)=>
{
//ToDo->tip
}); worker.RunWorkerCompleted+=new RunWorkerCompletedEventHandler((sender,e)=>
{
//ToDo->tip
});
}