类型转换-如何在c#中将backbasic转换为控件

本文关键字:backbasic 转换 控件 中将 类型转换 | 更新日期: 2023-09-27 18:02:11

我正试图将backfoundation转换为控件,但它说:

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

如何使事情工作?

我试着cast bw来控制,但同样的事情,这就是我尝试的:

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

类型转换-如何在c#中将backbasic转换为控件

欢迎来到SO!

删除这一行

this.Controls.Add(bw);

BackgroundWorker不是从Control派生的,所以你不能把它添加到Controls集合中,但是你不需要这样做。

您不需要添加BackgroundWorker到您的窗体的控件。

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

不确定为什么要将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]) 

然后你需要设置一个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)
{
}