在Silverlight中,如何在异步调用期间处理错误?
问题描述:
在我的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服务。
答
通常情况下,匹配完成的事件对任何异常都具有try/catch。
就像它是一个异步操作,它不知道它是成功还是失败,直到它完成,但它会在任何情况下完成。
答
传递给您的对象完成的事件处理程序需要保存错误消息。
例如
公共无效OnSubmitCompleted(TweetOperation OP) { 如果(op.ErrorMessage!= NULL)//处理错误
}
答
你必须检查错误场在处理程序中收到的参数中。
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
{
//...
}
你能发表SubmitAsync的代码吗? – dtb 2010-08-22 16:02:01
什么类型的服务? WCF? – 2010-08-22 16:04:09
有没有方法BeginSubmit有任何机会? – dtb 2010-08-22 16:10:47