2010-08-22 91 views
0

在我的SL4應用程序中,我調用了一個服務svc.SubmitAsync()。由於這是一個異步調用,一旦命中該方法,我的代碼就會進入下一行。只要用戶輸入正確的用戶名和密碼,就可以。如果他們不這樣做,EndSubmit()會拋出一個異常。 EndSubmit()在References.cs中,是自動生成的Silverlight代碼的一部分。在Silverlight中,如何在異步調用期間處理錯誤?

我試着在try-catch中包裝svc.SubmitAsync(),但這是一個異步調用,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服務。

+0

你能發表SubmitAsync的代碼嗎? – dtb 2010-08-22 16:02:01

+0

什麼類型的服務? WCF? – 2010-08-22 16:04:09

+0

有沒有方法BeginSubmit有任何機會? – dtb 2010-08-22 16:10:47

回答

0

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

就像它是一個異步操作,它不知道它是成功還是失敗,直到它完成,但它會在任何情況下完成。

0

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

例如

公共無效OnSubmitCompleted(TweetOperation OP) { 如果(op.ErrorMessage!= NULL)//處理錯誤

}

1

你必須檢查錯誤場在處理程序中收到的參數中。

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