我有一个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处理程序或者这是不好的做法?