J'ai une question concernant le séquençage des événements dans le scénario où vous appelez un service wcf de Silverlight 3 et la mise à jour de l'interface utilisateur sur un thread séparé. Fondamentalement, je voudrais savoir si ce que je fais est correct ... L'échantillon est comme suit. Ceci est mon premier post sur ici, alors portez-moi, parce que je ne suis pas sûr de savoir comment publier le code réel. L'échantillon est comme suit:Appel de service Web Async de Silverlight 3
//<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);
}
}
Ma question est donc essentiellement, à l'intérieur de mon thread d'interface utilisateur quand je suis le chargement de la réponse, si elle déclenche une exception, sera la prise de bloc « enfin » que? Si non, devrais-je mettre un autre essai/attraper à l'intérieur du lambda où je charge la réponse?
En outre, puisque j'exécute la charge sur le thread d'ui, est-il possible que le finalement s'exécutera avant que le thread d'interface utilisateur ait fini de mettre à jour? Et pourrait par conséquent appeler le Servicehelper.CloseService() avant que le chargement ait été fait?
Je demande parce que j'ai des problèmes intermittents en utilisant cette approche.