Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#中将后台工作转换为控件?_C#_Type Conversion_Backgroundworker_New Operator - Fatal编程技术网

如何在c#中将后台工作转换为控件?

如何在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();

见鬼,我正在尝试将背景转换为控制,但它说:

错误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);

您不需要向表单控件添加
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作为控件…您想做什么?我正在尝试在后台发送邮件…非常欢迎:-)如果回答了您的问题,您可以将答案标记为已接受。。。