关于在backgroundworker中操作UI控件

AQ520 2009-12-29 09:53:26
我用了backgroundworker控件 在dowork事件中循环得到一个控件,然后将这个控件加入到窗体中的一个PANEL中,怎么将这控件在循环当中加入到加入到窗体当中呢?
...全文
229 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
starj1 2009-12-30
  • 打赏
  • 举报
回复
在Background的ReportProgress事件中操作试过没有?
龙宜坡 2009-12-30
  • 打赏
  • 举报
回复
LZ的初衷是后台线程处理数据,但是,BackGroundWorker组件或利用委托Invoke也罢,关于界面的操作都在显示界面的那个线程中运行的!

完全关于界面的操作中,使用多线程没有意义!
龙宜坡 2009-12-30
  • 打赏
  • 举报
回复
没有必要这么做!
fufuki 2009-12-30
  • 打赏
  • 举报
回复
学习中
netusemaster 2009-12-30
  • 打赏
  • 举报
回复
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true;
worker.DoWork += new DoWorkEventHandler(bg_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(bg_ProgressChanged); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_RunWorkerCompleted);


private void bg_DoWork(object sender, DoWorkEventArgs e)
{
foreach (//你的循环)
{
control cl = ...// 得到你的控件
((BackgroundWorker)sender).ReportProgres(count ,cl); //控件传递到 bg_ProgressChanged事件

}
}


void bg_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//addcontrol 这里可以操作UI上的控件. }
  • 打赏
  • 举报
回复
老问题 了
fengqieer1986 2009-12-29
  • 打赏
  • 举报
回复
学习下
xiaohu9711 2009-12-29
  • 打赏
  • 举报
回复
用Invoke来做
LorenLiu 2009-12-29
  • 打赏
  • 举报
回复
需要在DoWork的事件响应中里调用BeginInvoke方法,示例代码如下:

public partial class Form1 : Form
{
// 定义delegate以实现添加control
public delegate void AddControlsHandler();

public Form1()
{
InitializeComponent();

m_BackgroundWorker = new BackgroundWorker();
m_BackgroundWorker.DoWork += new DoWorkEventHandler(m_BackgroundWorker_DoWork);
}

void m_BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
//调用form的BeginInvoke方法来调用一个delegate帮助实现添加控件
this.BeginInvoke(new AddControlsHandler(HandleAddControls));
}

void HandleAddControls()
{
this.panel1.Controls.Add(new Button());
}

private BackgroundWorker m_BackgroundWorker;

// 单击按钮以触发DoWork
private void button1_Click(object sender, EventArgs e)
{
m_BackgroundWorker.RunWorkerAsync();
}
}
AQ520 2009-12-29
  • 打赏
  • 举报
回复
直接在doworker中操作肯定报错。请问下怎么来处理这种情况。

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧