さまざまな検証を実行する 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 を使用しても大丈夫ですか、それともこれは悪い習慣ですか?