如何在C#中将BackgroundWork转换为控件?

时间:2013-03-05 10:55:07

标签: c# type-conversion backgroundworker new-operator

地狱我正在尝试将BackgroundWork转换为控制,但它说:

  

错误6参数1:无法转换   'System.ComponentModel.BackgroundWorker'来   'System.Windows.Forms.Control的'

这是代码

BackgroundWorker bw = new BackgroundWorker();
this.Controls.Add(bw);
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerAsync();

如何让事情发挥作用?

我尝试施放bw来控制但同样的事情,这是我尝试的:

this.Controls.Add((this.Control)bw);

3 个答案:

答案 0 :(得分:1)

欢迎来到SO!

只需删除此行

即可
this.Controls.Add(bw);

BackgroundWorker并非来自Control,因此您无法将其添加到Controls集合中,但无论如何都不需要这样做。

答案 1 :(得分:0)

您无需在表单控件中添加BackgroundWorker

它只是一个独立存在的对象。

答案 2 :(得分:0)

不确定为什么要将worker对象添加到控件集合中......

要发送电子邮件,您只需传入绑定到对象DoWorkEventHandler的工作方法,看起来您已经在那里: -

BackgroundWorker bw = new BackgroundWorker();
this.Controls.Add(bw); //REMOVE THIS LINE
bw.DoWork += new DoWorkEventHandler(bw_DoWork);

//If your email relies on data from some object you can pass it in as a parameter
bw.RunWorkerAsync([email object]) 

然后你需要设置一个工人方法来处理电子邮件的发送: -

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
     Email email = (Email)sender;
     //Send email
}

您可能还想知道当前作业何时完成,在这种情况下您可以在do work方法中使用类似的内容: -

this.Invoke(new JobDone(ReportProgress), result);

将委托定义为:

private delegate void JobDone(Result result);

ReportProgress方法看起来像: -

private void ReportProgress(Result result)
{

}