Я знаю, что это спустя годы после публикации, но подумал о добавлении комментария с кодом, объясняющим ответ Дастина Кэмпбелла, если кто-то еще сталкивался с этой веткой Я сталкивался с этим постом, пытаясь решить, что было бы наилучшей практикой, и это то, что подразумевается под ответом.
Создайте свой собственный класс обработчика событий
public class myCustomeEventArgs:EventArgs
{
public bool DoOverride { get; set; }
public string Variable1 { get; private set; }
public string Variable2{ get; private set; }
public myCustomeEventArgs(string variable1 , string variable2 )
{
DoOverride = false;
Variable1 = variable1 ;
Variables = variable2 ;
}
}
Поэтому, когда вы создаете свой делегат события, вы используете свои созданные аргументы событий, как это.
public delegate void myCustomeEventHandler(object sender, myCustomeEventArgs e);
А в классе, вызывающем событие, вы объявляете событие.
public event myCustomeEventHandler myCustomeEvent;
Поэтому, когда вы запускаете событие в своем классе, класс, который прослушивает событие, вы можете просто в теле события установить e.DoOverride = true; как это будет объявлено в классе, запускающем событие.
Событие пожара, например:
if(myCustomeEvent != null)
{
var eventArgs = new myCustomeEventArgs("Some Variable", "Another Varaible");
myCustomeEvent(this, eventArgs);
//Here you can now with the return of the event work with the event args
if(eventArgs.DoOverride)
{
//Do Something
}
}