C# 为BackgroundWorker设计接口

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

在我的windows窗体应用程序中,我有一个扩展backgroundworker的类,让我们在我的窗体类中称之为ExtendedBGW1.cs。我将其声明为成员变量,因此我对整个类都有作用域,如下所示:

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)