Проверьте, все ли прикрепленные методы были успешно завершены - PullRequest
0 голосов
/ 07 января 2012

Я занимаюсь разработкой приложения Silverlight LOB. Из-за некоторых необходимых функций я создал новый класс NewBasePage для всех страниц. Этот класс является производным от класса Page. Я добавил пару событий и поднял их вручную.

Но я застрял с некоторыми вещами. Мне нужно проверить, все ли методы, связанные с каким-либо событием, были успешно завершены. Есть ли способ сделать это?

Новый базовый класс:

public class NewPageBase : Page
{
        public void RefreshData(Action resultAction = null)
        {
            if (StartRefreshingData != null) StartRefreshingData(this, null);

            if (resultAction != null) resultAction();
        }

        public event EventHandler StartRefreshingData;

}

Xaml:

<newbase:NewBasePage ...>

...

  <i:Interraction.Triggers>
    <i:EventTrigger EventName="StartRefreshingData">
        <i:InvokeCommandAction Command="{StaticResource someCommandFromViewModel}"/>
    </i:EventTrigger>
  </i:Interraction.Triggers>
</newbase:NewBasePage>

1 Ответ

1 голос
/ 07 января 2012

Если вы хотите узнать, не обработал ли какой-либо обработчик событий свою работу, вы можете либо сгенерировать исключение, либо предоставить собственный тип EventArgs, который отслеживает сбой любого обработчика событий.

public class FailureEventArgs : EventArgs // not the best name, I know
{
    private bool _failed;

    public bool Failed
    {
        get { return _failed; }
        set { _failed |= value; }
    }
}

Использование:

// Event declaration
public event EventHandler<FailureEventArgs> MyFailingEvent;

// Event invocation
private void Invoke()
{
    bool failure = false;
    var handler = MyFailingEvent;
    if (handler != null)
    {
        var args = new FailureEventArgs();
        handler(this, args);
        failure = args.Failed;
    }

    // more code, aware of possible failure
}

// In your event handler
private void OnEvent(object sender, FailureEventArgs args)
{
    var errorOccured = false;

    // some code which could set errorOccured to true

    args.Failure = errorOccured;
}

И, как уже упоминалось в моем комментарии выше, после завершения вызова события вы можете быть уверены, что обработчик прикрепленных событий больше не обрабатывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...