Question

Dans mes applications Windows Forms je une classe qui étend une BackgroundWorker, nous allons l'appeler ExtendedBGW1.cs dans ma classe de forme je déclare comme une variable membre donc j'ai portée pour toute la classe comme ceci:

public partial class Main : Form
{
    ExtendedBGW1 ebgw1;
}

Plus tard dans le constructeur de formes que je fais

public Main()
{
    InitializeComponent();

    ebgw1 = new ExtendedBGW1();

    InitializeBackgoundWorker();
}

Ma méthode InitializeBackgroundWoker () ressemble à ceci

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;
}

Maintenant vient mon problème de conception. Je sais maintenant que je vais avoir des cours plus comme mes extenededBGW1.cs qui se prolongera BackgroundWorker donc je pensais que si je crée un IExtenedBackGroundWorker que je pouvais faire quelque chose comme ça.

public partial class Main : Form
{
    IExtenedBackGroundWorker ebgw1;
}

Et ont encore la portée appropriée pour la classe principale. Ensuite, je pouvais créer selon la mise en œuvre de IExtendedBackGroundWorker j'ai besoin plus tard.

Je peux faire l'interface pour les méthodes et les propriétés sans problème beaucoup, mais je suis vraiment en cours d'exécution dans un problème lorsque je tente de câbler les événements correctement entre l'interface de la classe de base et la classe principale.

Quelqu'un at-il des idées?

Voici les erreurs que je reçois dans la principale

Error   1   Cannot assign to 'DoWork' because it is a 'method group'

et est ici l'erreur que je reçois dans mon de l'interface Implémentation

Error   5   The event 'System.ComponentModel.BackgroundWorker.DoWork' can only appear on the left hand side of += or -= 

voici ce que mon interface ressemble en ce moment:

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);
}
Était-ce utile?

La solution

facile, à seulement 1 - 2 - 3 - Fait

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
{

}

Utilisation:

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();
    }
  }
}

Amusez-vous bien:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top