如何实现可以取消的活动?

时间:2009-02-22 12:35:59

标签: c# .net events

请帮我实现一个事件,处理程序可以取消它。

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);
        }
    }
}

3 个答案:

答案 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类 - 请考虑使用它。