地狱我正在尝试将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);
答案 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)
{
}