В Silverlight, как я могу обработать ошибку во время асинхронного вызова? - PullRequest
0 голосов
/ 22 августа 2010

В моем приложении SL4 у меня есть вызов службы svc.SubmitAsync ().Поскольку это асинхронный вызов, после нажатия метода мой код переходит к следующей строке.Это нормально, если пользователь вводит правильное имя пользователя и пароль.Если они этого не делают, EndSubmit () генерирует исключение.EndSubmit () находится в References.cs, части автоматически сгенерированного кода Silverlight.

Я попытался обернуть svc.SubmitAsync () в try-catch, но это асинхронный вызов и блок try-catch завершаетсядо того, как исключение будет выдано.

Как я могу поймать эту ошибку?

Спасибо!

Обновление 1

public void SubmitTweetAsync(TestSilverlightApp.svc.Tweet tweet, object userState) {
            if ((this.onBeginSubmitTweetDelegate == null)) {
                this.onBeginSubmitTweetDelegate = new BeginOperationDelegate(this.OnBeginSubmitTweet);
            }
            if ((this.onEndSubmitTweetDelegate == null)) {
                this.onEndSubmitTweetDelegate = new EndOperationDelegate(this.OnEndSubmitTweet);
            }
            if ((this.onSubmitTweetCompletedDelegate == null)) {
                this.onSubmitTweetCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSubmitTweetCompleted);
            }
            base.InvokeAsync(this.onBeginSubmitTweetDelegate, new object[] {
                        tweet}, this.onEndSubmitTweetDelegate, this.onSubmitTweetCompletedDelegate, userState);
        }

Обновление 2 - Этосервис WCF.

Ответы [ 3 ]

1 голос
/ 22 октября 2010

Вы должны проверить поле Error в параметре, который вы получаете в обработчике.

private void Client_SubmitCompleted(object sender, SubmitCompletedEventArgs e)
{
    if (e.Cancelled)
    {
        //...
    }
    else if (e.Error != null)
    {
        // the service operation threw an exception
        throw e.Error;
    }
    else
    {
        //...
    }
0 голосов
/ 22 октября 2010

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

Например

public void OnSubmitCompleted (операция TweetOperation) { if (op.ErrorMessage! = null) // обработать ошибку

}

0 голосов
/ 23 августа 2010

Обычно это совпадающее завершенное событие, которое имеет попытку / перехват для любых исключений.

Поскольку это асинхронная операция, она не знает, была ли она успешной или неудачной, пока не завершится, но в любом случае она будет завершена.

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