Сегодня я экспериментировал с приложениями WP7 и наткнулся на стену. Мне нравится разделять пользовательский интерфейс и основной код приложения, но я наткнулся на стену.
Я успешно выполнил запрос веб-клиента и получил результат, но поскольку вызов является асинхронным, я не знаю, как передать эту резервную копию в Уровень пользовательского интерфейса. Кажется, я не могу взломать, дожидаясь завершения ответа или чего-то еще. Я, должно быть, делаю что-то не так.
(это библиотека xbox360Voice, которую я могу загрузить на моем веб-сайте: http://www.jamesstuddart.co.uk/Projects/ASP.Net/Xbox_Feeds/ , который я переношу на WP7 в качестве теста)
вот фрагмент кода серверной части:
internal const string BaseUrlFormat = "http://www.360voice.com/api/gamertag-profile.asp?tag={0}";
internal static string ResponseXml { get; set; }
internal static WebClient Client = new WebClient();
public static XboxGamer? GetGamer(string gamerTag)
{
var url = string.Format(BaseUrlFormat, gamerTag);
var response = GetResponse(url, null, null);
return SerializeResponse(response);
}
internal static XboxGamer? SerializeResponse(string response)
{
if (string.IsNullOrEmpty(response))
{
return null;
}
var tempGamer = new XboxGamer();
var gamer = (XboxGamer)SerializationMethods.Deserialize(tempGamer, response);
return gamer;
}
internal static string GetResponse(string url, string userName, string password)
{
if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password))
{
Client.Credentials = new NetworkCredential(userName, password);
}
try
{
Client.DownloadStringCompleted += ClientDownloadStringCompleted;
Client.DownloadStringAsync(new Uri(url));
return ResponseXml;
}
catch (Exception ex)
{
return null;
}
}
internal static void ClientDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
ResponseXml = e.Result;
}
}
, а это код внешнего интерфейса:
public void GetGamerDetails()
{
var xboxManager = XboxFactory.GetXboxManager("DarkV1p3r");
var xboxGamer = xboxManager.GetGamer();
if (xboxGamer.HasValue)
{
var profile = xboxGamer.Value.Profile[0];
imgAvatar.Source = new BitmapImage(new Uri(profile.ProfilePictureMiniUrl));
txtUserName.Text = profile.GamerTag;
txtGamerScore.Text = int.Parse(profile.GamerScore).ToString("G 0,000");
txtZone.Text = profile.PlayerZone;
}
else
{
txtUserName.Text = "Failed to load data";
}
}
Теперь я понимаю, что мне нужно что-то поместить в ClientDownloadStringCompleted
но я не знаю, что именно.