簡體   English   中英

在Silverlight中,如何處理異步調用期間的錯誤?

[英]In Silverlight, how do I handle an error during an asynchronous call?

在我的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服務。

您必須檢查在處理程序中收到的參數中的“錯誤”字段。

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
    {
        //...
    }

通常,匹配完成事件具有對任何異常的try / catch。

由於它是異步操作,它不知道它是成功還是失敗,直到完成為止,但是無論哪種情況都將完成。

傳遞給您的Completed事件處理程序的對象將需要保存錯誤消息。

例如

public void OnSubmitCompleted(TweetOperation op){if(op.ErrorMessage!= null)//處理錯誤

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM