C# 为BackgroundWorker设计接口
在我的windows窗体应用程序中,我有一个扩展backgroundworker的类,让我们在我的窗体类中称之为ExtendedBGW1.cs。我将其声明为成员变量,因此我对整个类都有作用域,如下所示:C# 为BackgroundWorker设计接口,c#,.net,backgroundworker,C#,.net,Backgroundworker,在我的windows窗体应用程序中,我有一个扩展backgroundworker的类,让我们在我的窗体类中称之为ExtendedBGW1.cs。我将其声明为成员变量,因此我对整个类都有作用域,如下所示: public partial class Main : Form { ExtendedBGW1 ebgw1; } 稍后在表单构造函数中,我会这样做 public Main() { InitializeComponent(); ebgw1 = new ExtendedB
public partial class Main : Form
{
ExtendedBGW1 ebgw1;
}
稍后在表单构造函数中,我会这样做
public Main()
{
InitializeComponent();
ebgw1 = new ExtendedBGW1();
InitializeBackgoundWorker();
}
我的initializebackgroundroker()方法如下所示
private void InitializeBackgoundWorker()
{
ebgw1.DoWork += new DoWorkEventHandler(ebgw1.worker_DoWork);
ebgw1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(processWorkerCompleted);
ebgw1.ProgressChanged += new ProgressChangedEventHandler(processProgressChanged);
ebgw1.WorkerReportsProgress = true;
ebgw1.WorkerSupportsCancellation = true;
}
现在我的设计问题来了。我现在知道,我将有更多不同的类,比如我的extendedbgw1.cs,它们将扩展BackGroundWorker,所以我想如果我创建一个IExtendedBackgroundWorker,我可以这样做
public partial class Main : Form
{
IExtenedBackGroundWorker ebgw1;
}
并且仍然有适合主类的范围。然后我就可以创建稍后需要的IExtendedBackGroundWorker的任何实现
我可以为方法和属性创建接口,没有太多问题,但是当我尝试在接口基类和主类之间正确连接事件时,我确实遇到了问题
有人有什么想法吗
这里是我在主要的错误
Error 1 Cannot assign to 'DoWork' because it is a 'method group'
这是我在实现接口时遇到的错误
Error 5 The event 'System.ComponentModel.BackgroundWorker.DoWork' can only appear on the left hand side of += or -=
下面是我的界面现在的样子:
interface IExtendedBackGroundWorker
{
bool IsBusy { get; }
bool WorkerReportsProgress { get; set; }
bool WorkerSupportsCancellation { get; set; }
List<CompareObject> ObjList { get; set; }
string FilePath { get; set; }
void RunWorkerAsync();
void CancelAsync();
void DoWork();
void worker_DoWork(object sender, DoWorkEventArgs e);
void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e);
void ProgressChanged(object sender, ProgressChangedEventArgs e);
}
接口IExtendedBackGroundWorker
{
布尔正忙{get;}
bool WorkerReportsProgress{get;set;}
布尔工作支持扫描单元{get;set;}
列表对象列表{get;set;}
字符串文件路径{get;set;}
void RunWorkerAsync();
void CancelAsync();
无效销钉();
无效工作(对象发送方,工作目标);
void RunWorkerCompleted(对象发送方,runworkercompletedventargs e);
void ProgressChanged(对象发送方,progresschangedventargs e);
}
简单,只需1-2-3-完成
public interface IMyWorker
{
bool WorkerReportsProgress { get; set; }
bool WorkerSupportsCancellation { get; set; }
event DoWorkEventHandler DoWork;
event ProgressChangedEventHandler ProgressChanged;
event RunWorkerCompletedEventHandler RunWorkerCompleted;
}
public class MyWorker : BackgroundWorker, IMyWorker
{
}
用法:
namespace stackOverflow
{
class Program
{
static void Main(string[] args)
{
IMyWorker worker = new MyWorker();
worker.DoWork += new System.ComponentModel.DoWorkEventHandler(worker_DoWork);
}
static void worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
throw new NotImplementedException();
}
}
}
玩得开心:)你是如何定义接口的?我在我的OP中添加了…对不起…我想我对如何处理事件处理程序感到困惑,IExtendedBackgroundWorker看起来像什么,同样是ExtendedBGW1(因为该字段声明为ExtendedBGW1,所以常规API优先于IExtendedBackgroundWorker)