Handling WebService Exceptions When Invoking a Webmethod Asynchronously
From the "duh, of course, but I forgot it" department:
When catching a SoapException thrown by a WebMethod that you called asyncronously, you have to pass the exception back to the UI thread through a delegate if you want to, say, display a message to the user:
/// <summary>A delegate used to pass the data from the asynch webservice call back to the UI thread</summary>
private delegate void SaveDel(ContactDS cDS);
/// <summary>Delegate used to pass any exception back to the UI thread</summary>
private delegate void AsynchErrorDel(Exception exc);
/// <summary>
/// Call-back method running on the Asynchronous WS thread.
/// </summary>
/// <param name="ar">Represents the status of the asynchronous operation</param>
private void SaveContact(IAsyncResult ar)
{
try
{
//Get the contact record count from the EndInvoke WS method
ContactDS cDS = new ContactBll().EndSaveContact(ar);
//Pass the record count to the UI thread by invoking the UpdateStatus method through the SaveDel delegate
this.Invoke(new SaveDel(UpdateStatus), new object[]{cDS});
}
catch (Exception exc)
{
//if something went wrog during the call, pass the exception back to the UI thread
this.Invoke(new AsynchErrorDel(HandleAsynchError), new object[]{exc});
}
}
This really is no different from any other asynch call - you shouldn't update the UI from a background worker thread.
0 Comments:
Post a Comment
<< Home