Спокойной ночи, я пытаюсь вызвать поток пользовательского интерфейса, обновить proprety actualy, внутри метода HttpWebRequest.BeginGetResponse
, используя метод CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync
. Но это не работает, я не знаю, как это работает на самом деле. Существует мой код:Вызов пользовательского интерфейса в HttpWebRequest.BeginGetResponse
private void DebutReponse(IAsyncResult resultatAsynchrone)
{
HttpWebRequest requete = (HttpWebRequest)resultatAsynchrone.AsyncState;
Stream postStream = requete.EndGetRequestStream(resultatAsynchrone);
string donneesAEnvoyer = "username=" + Name + "&password=" + Password + "&email=" + Email;
string lol = donneesAEnvoyer;
byte[] tableau = Encoding.UTF8.GetBytes(donneesAEnvoyer);
postStream.Write(tableau, 0, donneesAEnvoyer.Length);
postStream.Close();
requete.BeginGetResponse(FinReponse, requete);
}
private void FinReponse(IAsyncResult resultatAsynchrone)
{
HttpWebResponse aResp = null;
try
{
HttpWebRequest requete = (HttpWebRequest)resultatAsynchrone.AsyncState;
WebResponse webResponse = requete.EndGetResponse(resultatAsynchrone);
Stream stream = webResponse.GetResponseStream();
StreamReader streamReader = new StreamReader(stream);
string reponse = streamReader.ReadToEnd();
stream.Close();
streamReader.Close();
webResponse.Close();
//ErrorGridHeight = new GridLength(0.3, GridUnitType.Star);
ErrorMsg = msgSucceed;
}
catch (WebException e)
{
if (e.Response != null)
{
aResp = e.Response as HttpWebResponse;
}
}
if (aResp != null)
await errorFunc();
}
private async Task errorFunc()
{
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => ErrorMsg = msgFailed);
}
У меня есть ошибка говорит мне, что я могу использовать только оператор await
внутри async
метода, который возвращать Task
. Я понятия не имею, как это работает.
EDIT: Ok поэтому я изменил мой код немного, чтобы избежать проблем этой функции:
requete.BeginGetResponse(FinReponse, requete);
, потому что она хочет функция с конкретным прототипом, так что я сделал это:
private async Task lol(IAsyncResult resultatAsynchrone)
{
HttpWebResponse aResp = null;
try
{
HttpWebRequest requete = (HttpWebRequest)resultatAsynchrone.AsyncState;
WebResponse webResponse = requete.EndGetResponse(resultatAsynchrone);
Stream stream = webResponse.GetResponseStream();
StreamReader streamReader = new StreamReader(stream);
string reponse = streamReader.ReadToEnd();
stream.Close();
streamReader.Close();
webResponse.Close();
//ErrorGridHeight = new GridLength(0.3, GridUnitType.Star);
ErrorMsg = msgSucceed;
}
catch (WebException e)
{
if (e.Response != null)
{
aResp = e.Response as HttpWebResponse;
}
}
if (aResp != null)
await errorFunc();
}
private void FinReponse(IAsyncResult resultatAsynchrone)
{
Task.Run(() => lol(resultatAsynchrone));
}
private async Task errorFunc()
{
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => ErrorMsg = msgFailed);
}
Единственная проблема заключается в том, что он не меняет proprety, он не входит в набор моего припрета. И у меня есть Exeption, который:
System.NotImplementedExeption
Спасибо за помощь.
«Я не знаю, как это работает». Возможно, это плохая идея задать вопрос здесь. Лучше сначала попытайтесь понять async/await, прочитав онлайн-документацию, учебные пособия и т. Д. – Clemens
Да, я просто смотрел его, https://msdn.microsoft.com/fr-fr/library/hh191443.aspx, но я не уверен полностью понять весь шаг в примере. Я хотел попрактиковаться, чтобы, возможно, лучше справиться. – king