3

さまざまな検証を実行する Gui アプリケーションがあります。これらの検証の一部は時間がかかる可能性があるため、BackgroundWorker で実行しています。現在のコードは次のようになります。

//sample validator interface
public interface Validator
{
    void Validate();
}

//BGWs DoWork-method:

private void myBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    ValidatorA.Validate();
    ValidatorB.Validate();
    ValidatorC.Validate();
}

現在、キャンセルもサポートする必要があるバリデーターがいくつかあります。これは、大量のコードを追加することで実現できます。または、次の方法で行うこともできます。

public interface Validator
{
    void DoValidationWork(object sender, DoWorkEventArgs e);
}

class NormalValidator
{
    void DoValidationWork(object sender, DoWorkEventArgs e)
    {
        //validation-work
    }
}

class CancelableValidator
{
    void DoValidationWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker bgw = sender as BackgroundWorker;
        while(!bgw.CancellationPending)
        {
            //validation-work
        }
    }
}

//setup
myBGW.DoWork += ValidatorA.DoValidationWork;
myBGW.DoWork += CancelableValidatorB.DoValidationWork;
myBGW.DoWork += ValidatorC.DoValidationWork;

私の理解によれば、これは同じ結果をもたらしますが、すべてのバリデーターは独自にキャンセルを処理できます。

複数の DoWork-Handlers を使用しても大丈夫ですか、それともこれは悪い習慣ですか?

4

1 に答える 1