2010-08-22 58 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 
    { 
     //... 
    }