Пасуйте назад возвращаемое значение через EventHandler

Я не знаю, но у Вас есть обычные счетчики производительности в Windows Mobile? Вы могли посмотреть на вещи как переключатели/секунда контекста. Я не знаю, существует ли тот, который конкретно измеряет время контекстного переключения все же.

33
задан Leroy Jenkins 18 September 2009 в 18:43
поделиться

3 ответа

Общий шаблон здесь состоит не в том, чтобы возвращать какие-либо данные из обработчика события, а в добавлении свойств к вашему объекту аргумента события, чтобы потребитель события мог установить свойства, которые затем может вызывать вызывающий. доступ. Это очень часто встречается в коде обработки пользовательского интерфейса; вы повсюду видите концепцию события Cancel.

Ниже приведен псевдокод, не готовый к компиляции. Его цель - показать шаблон.

public class MyEventArgs : EventArgs
{
   public bool Cancel{get;set;}
}

public bool fireEvent()
{
    MyEventArgs e=new MyEventArgs();

    //Don't forget a null check, assume this is an event
    FireEventHandler(this,e);

    return e.Cancel;
}

public HandleFireEvent(object sender, MyEventArgs e)
{
 e.Cancel=true;
}

Edit

Мне нравится, как Джон Скит сформулировал это: сделать EventArgs изменяемым. То есть получатель события может изменить состояние объекта EventArgs , позволяя инициатору события получить доступ к этим данным.

49
ответ дан 27 November 2019 в 17:38
поделиться

Единственный способ сделать это - сделать один из аргументов (желательно "args", а не отправителя) изменяемым. Если он еще не изменен, у вас в основном проблемы - просто нет способа получить информацию.

(Хорошо, есть один способ - вы можете сохранить неизменным сам аргумент события, но сделать один из его членов методом что в конечном итоге вызывает делегат, зарегистрированный кодом, в первую очередь вызывающим событие. Но это ужасно ...)

19
ответ дан 27 November 2019 в 17:38
поделиться

Простым решением является использование закрытия:

public override bool Run() {
    SomeInfo someInfo = ...
    table.WhenData += (obj, args) => {
        someInfo.Return = something
    };
}
1
ответ дан 27 November 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: