私のWindowsフォームアプリケーションには、バックグラウンドワーカーを拡張するクラスがあります。フォームクラスでExtendedBGW1.csと呼びましょう。メンバー変数のように宣言するので、次のようにクラス全体のスコープを持ちます。
public partial class Main : Form
{
ExtendedBGW1 ebgw1;
}
後でフォームコンストラクターでこれを行います
public Main()
{
InitializeComponent();
ebgw1 = new ExtendedBGW1();
InitializeBackgoundWorker();
}
私の InitializeBackgroundWoker() メソッドは次のようになります
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;
}
今度は私のデザインの問題です。BackGroundWorker を拡張する extensedBGW1.cs のようなさまざまなクラスが必要になることがわかったので、IExtenedBackGroundWorker を作成すると、このようなことができると考えていました。
public partial class Main : Form
{
IExtenedBackGroundWorker ebgw1;
}
Main クラスの適切なスコープはまだあります。次に、後で必要になる 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);
}