-1

地狱我正在尝试将 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);
4

3 回答 3

1

欢迎来到 SO!

只需删除此行

this.Controls.Add(bw);

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

于 2013-03-05T10:58:03.583 回答
0

您不需要将 a 添加BackgroundWorker到表单的控件中。

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

于 2013-03-05T10:58:01.663 回答
0

不知道为什么要将工作对象添加到控件集合中...

要发送电子邮件,您可以简单地传递一个绑定到 objects 的工作方法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)
{

}
于 2013-03-05T11:13:10.467 回答