MVVM Toolkit — как заставить MessageBox отображать ошибку обратного вызова в случае сбоя службы WCF

Я использую MVVM Toolkit для создания своих приложений WP7 и пытаюсь заставить MessageBox отображать ошибку в случае сбоя службы WCF.

Вот код, который у меня есть в моем слое ServiceHelper:

        public void GetRandomBibleVerseById(Action<Bible, Exception> callback)
    {
        var client = new StoneFalconClient();

        client.GetRandomBibleVerseByIdCompleted += (s, e) =>
            {
                var userCallback = e.UserState as Action<Bible, Exception>;

                if (userCallback == null)
                {
                    return;
                }

                if (e.Error != null)
                {
                    userCallback(null, e.Error);
                    return;
                }

                userCallback(e.Result, null);
            };

        client.GetRandomBibleVerseByIdAsync(callback);
    }

Я попытался разместить try/catch вокруг вызова службы, выполнив что-то вроде этого, но у меня не появляется окно сообщения с ошибкой. Вот моя MainViewModel:

        public MainViewModel()
    {
        if (IsInDesignMode)
        {
            BibleVerse = LoadDebugVerse();
        }
        else
        {
            try
            {
                ServiceHelper helper = new ServiceHelper();

                helper.GetRandomBibleVerseById((bibleVerse, error) =>
                {
                    Bible displayVerse = LoadDisplayVerse(bibleVerse);
                    BibleVerse = displayVerse;

                    TestamentBookChapterVerse = displayVerse.Testament + ": " + displayVerse.Book + " " + displayVerse.Chapter + ":" + displayVerse.Verse; ;
                });
            }
            catch (Exception ex)
            {
                ErrorMessage = new RelayCommand<String>(m => MessageBox.Show("Error: Click refresh to try again"));
            }
        }
    }

Я привязываю xaml на странице xaml к модели представления. Я подозреваю, что мне не следует использовать try/caatch, а вместо этого проверять e.Error, но я понятия не имею, как это сделать.

Любая помощь будет оценена по достоинству, я вечно искал ответ, но безуспешно.


person RJ.    schedule 09.12.2010    source источник


Ответы (1)


RJ,

Ваш объект client (типа StoneFalconClient) должен иметь событие AsyncCompleted, для которого вы можете зарегистрировать обработчик. В вашем обработчике OnAsyncCompleted должно быть поле Error в параметре EventArgs.

Удачи
Джим Маккарди

person Jim McCurdy    schedule 15.01.2011