0
對於從silverlight 3調用wcf服務並更新單獨線程中的ui的場景中的事件排序,我有一個問題。基本上,我想知道我在做什麼是正確的...示例如下。這是我在這裏的第一篇文章,請耐心等待,因爲我不確定如何發佈實際代碼。示例如下:來自Silverlight 3的異步Web服務調用
//<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線程內,當我加載的響應,如果拋出異常,將在「最後」塊明白了嗎?如果沒有,我應該在另一個try/catch裏面加載響應的lambda?
另外,因爲我在ui線程上執行加載,是否有可能在UI線程完成更新之前執行finally操作?並且可能因此在加載完成之前調用Servicehelper.CloseService()?
我問,因爲我使用這種方法有間歇性問題。