请帮我实现一个事件,处理程序可以取消它。
public class BuildStartEventArgs : EventArgs
{
public bool Cancel { get; set; }
}
class Foo
{
public event EventHandler<BuildStartEventArgs> BuildStart;
private void Bar()
{
// build started
OnBuildStart(new BuildStartEventArgs());
// how to catch cancellation?
}
private void OnBuildStart(BuildStartEventArgs e)
{
if (this.BuildStart != null)
{
this.BuildStart(this, e);
}
}
}
答案 0 :(得分:5)
您需要修改此代码:
private void Bar()
{
// build started
OnBuildStart(new BuildStartEventArgs());
// how to catch cancellation?
}
这样的事情:
private void Bar()
{
var e = new BuildStartEventArgs();
OnBuildStart(e);
if (!e.Cancel) {
// Do build
}
}
.NET中的类具有引用语义,因此您可以看到对该事件参数的对象所做的任何更改。
答案 1 :(得分:1)
在BuildStartEventArgs类上有一个布尔取消属性。 让事件处理程序能够标记这个。
private void Bar()
{
// build started
var args = new BuildStartEventArgs();
OnBuildStart(args);
if (args.Cancel)
{
// cancel
}
}
答案 2 :(得分:1)
您的BuildStartEventArgs
是多余的,框架已经提供了CancelEventArgs
类 - 请考虑使用它。