在从 silverlight 3 调用 wcf 服务并在单独的线程上更新 ui 的场景中,我有一个关于事件顺序的问题。基本上,我想知道我所做的是否正确......示例如下。这是我在这里的第一篇文章,所以请耐心等待,因为我不确定如何发布实际代码。样品如下:
//<summary>
public static void Load(string userId)
{
//Build the request.
GetUserNameRequest request =
new GetUserNameRequest { UserId = userId };
//Open the connection.
instance.serviceClient = ServiceController.UserService;
//Make the request.
instance.serviceClient.GetUserNameCompleted
+= UserService_GetUserNameCompleted;
instance.serviceClient.GetGetUserNameAsync(request);
return instance.VM;
}
/// <summary>
private static void UserService_GetUserNameCompleted(object sender, GetUserNameCompletedEventArgs e)
{
try
{
Controller.UIDispatcher.BeginInvoke(() =>
{
//Load the response.
if (e.Result != null && e.Result.Success)
{
LoadResponse(e.Result);
}
//Completed loading data.
});
}
finally
{
instance.serviceClient.GetUserNameCompleted
-= UserService_GetUserNameCompleted;
ServiceHelper.CloseService(instance.serviceClient);
}
}
所以我的问题基本上是,在我的 UI 线程内部,当我加载响应时,如果抛出异常,“finally”块会捕捉到它吗?如果不是,我应该在加载响应的 lambda 中再放一个 try/catch 吗?
另外,由于我在 ui 线程上执行加载,最终是否有可能在 UI 线程完成更新之前执行?因此可以在加载完成之前调用 Servicehelper.CloseService() 吗?
我问是因为我在使用这种方法时遇到了间歇性问题。