我有一个将执行不同验证的 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 处理程序是否可以,或者这是不好的做法?