如何在c#中将后台工作转换为控件?
见鬼,我正在尝试将背景转换为控制,但它说: 错误6参数1:无法从转换 “System.ComponentModel.BackgroundWorker”到 'System.Windows.Forms.Control' 这是代码如何在c#中将后台工作转换为控件?,c#,type-conversion,backgroundworker,new-operator,C#,Type Conversion,Backgroundworker,New Operator,见鬼,我正在尝试将背景转换为控制,但它说: 错误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();
BackgroundWorker bw = new BackgroundWorker();
this.Controls.Add(bw);
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerAsync();
如何使事情运转
我试图控制bw,但同样的事情,我尝试的是:
this.Controls.Add((this.Control)bw);
您不需要向表单控件添加
BackgroundWorker
它只是一个独立存在的对象。欢迎使用SO
把这条线拆下来
this.Controls.Add(bw);
BackgroundWorker
不是从Control
派生的,因此您无法将其添加到Controls
集合中,但您不需要这样做。不确定为什么要将worker对象添加到Controls集合中
要发送电子邮件,您只需传入一个绑定到对象dowworkeventhandler
的worker方法,看起来您已经完成了一部分:-
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])
然后,您需要设置一个worker方法来处理电子邮件的发送:-
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)
{
}
您不能添加backgroundworker作为控件…您想做什么?我正在尝试在后台发送邮件…非常欢迎:-)如果回答了您的问题,您可以将答案标记为已接受。。。