У меня есть вопрос относительно последовательности событий в сценарии, когда вы вызываете службу wcf из 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);
}
}
Таким образом, мой вопрос в основном заключается в том, что внутри моего потока пользовательского интерфейса, когда я загружаю ответ, если он вызывает исключение, блок "finally" поймает это? Если нет, я должен поместить еще одну попытку / ловить внутри лямбды, куда я загружаю ответ?
Кроме того, поскольку я выполняю загрузку в потоке пользовательского интерфейса, возможно ли, что finally будет выполнено до того, как поток пользовательского интерфейса завершит обновление? И может ли в результате вызвать Servicehelper.CloseService () до того, как загрузка будет выполнена?
Я спрашиваю, потому что у меня периодически возникают проблемы с использованием этого подхода.