Как импортировать событие, которое можно отменить?


3

Помогите мне выполнить мероприятие, которое обработчик может отменить.

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

Почему бы не использовать уже существующий класс System.CancelEventArgs? 22 фев. 092009-02-22 12:42:39

  0

Кстати, это System.ComponentModel.CancelEventArgs :) 22 фев. 092009-02-22 13:04:14

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 есть эталонные семантики, так что вы можете видеть все изменения, внесенные в object - параметр ссылок на события.

  0

Спасибо! Я думал, что будет намного сложнее 22 фев. 092009-02-22 12:51:00

+1

Не все в программировании сложно ... это просто кажется так :-) 22 фев. 092009-02-22 13:19:28


1

Имейте свойство Boolean Отменить в классе BuildStartEventArgs. Позвольте этому обработчику (-ам) отмечать это.

private void Bar() 
{ 
    // build started 
    var args = new BuildStartEventArgs(); 
    OnBuildStart(args); 
    if (args.Cancel) 
    { 
    // cancel 
    } 

} 
  0

В примере в вопросе уже существует свойство Boolean Cancel в классе BuildStartEventArgs. 22 фев. 092009-02-22 12:41:59

  0

стоит вниз? 22 фев. 092009-02-22 12:45:04


1

Ваш BuildStartEventArgs избыточны, структура уже предлагает CancelEventArgs класс - рассмотреть возможность использования его.

  0

Спасибо за подсказку. Но у моего класса есть дополнительные свойства, я просто не писал их здесь. 22 фев. 092009-02-22 12:44:27

+2

Но вы можете унаследовать от CancelEventArgs! 22 фев. 092009-02-22 12:58:40