У меня есть следующий код, который им, используя для подключения ОтдыхаетWindows 8 Phone ждать BeginGetRequestStream закончить
public void aquireToken()
{
HttpWebRequest apiR = (HttpWebRequest)HttpWebRequest.Create(new Uri(apiUrl + "authorize?"));
apiR.Method = "POST";
apiR.ContentType = "application/x-www-form-urlencoded";
apiR.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), apiR);
}
private void GetRequestStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
// End the stream request operation
Stream postStream = myRequest.EndGetRequestStream(callbackResult);
// Create the post data
string postData = "username=" + NTUser.username + "&appId=" + appId + "&signed=" + CreateSignedHex();
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Add the post data to the web request
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
// Start the web request
myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), myRequest);
}
private void GetResponsetStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream()))
{
string result = httpWebStreamReader.ReadToEnd();
var u = JsonConvert.DeserializeObject<dynamic>(result);
//string jsondata = u.data.toString();
NTUser.token = JsonConvert.DeserializeObject<Token>(u.data.ToString());
}
}
Проблемы при вызове метода aquireToken из телефонного интерфейса, он не ждать на httprequest для завершения, которые вызывают в null-ссылках, потому что следующая страница пользовательского интерфейса пытается получить доступ к данным, которые еще не загружены.
Как представить простой загрузчик в потоке пользовательского интерфейса при получении необходимой информации из API ?
Заранее спасибо.
Я не уверен, как следовать вашим ответам. Можете привести пример использования? – Peter
Вам необходимо использовать обратный вызов (GetResponsetStreamCallback) для продолжения вызова пользовательского интерфейса. Добавление псевдопоказа в ответе. –