2017-04-19 1 views
-2

code snippet link Ich entwickle Windows 8-Anwendung in C#. Ich habe 2 textBlocks in meiner GUI. Ich bekomme eine Texteingabe vom Benutzer und weise sie textblock1 mit textBlock1.Text = user input; zu. Danach rufe ich eine Methode, die einige Daten aus der API in JSON und einen Teil der Daten in TextBlock2 mit textBlock2.Text = "specific data"; gefüllt Text aber beide Textblöcke wird zur gleichen Zeit geändert, die ich nicht will. Entsprechend der Codefolge sollte der Text von textBlock1 früher geändert werden, da textblock2 nach dem Aufruf der API in etwa 10 Sekunden lang geändert wird. Wie kann ich Text von textBlock1 zuerst ändern? helfen Sie mir, wie ich neu in der Windows-Entwicklung bin.Wie aktualisiert man textBlock Text nach der Aktualisierung seines Textes?

+0

Es hilft, wenn Sie ein Code-Snippet veröffentlichen. –

+0

@SeanStayn stayn ich habe Code-Snippet hinzugefügt, werfen Sie einen Blick. hoffe, es klärt, was ich versuche –

+0

Veröffentlichen Sie den Code der 'populateResponses' Methode. – Unknown

Antwort

0

In Ihrer Methode verwenden Sie

HttpResponseMessage response = client.GetAsync(userInput).Result; 
string result = response.Content.ReadAsStringAsync().Result; 

Wenn Sie eine Async-Methode aufrufen, sollten Sie die warten auf Anweisung verwenden, wenn der Code für den Methodenaufruf warten soll, wie folgt aus:

HttpResponseMessage response = await client.GetAsync(userInput).ConfigureAwait(false); 
string result = await response.Content.ReadAsStringAsync().ConfigureAwait(false); 

Aber dafür müssen Sie Ihre Methode Asynchron ändern:

private async void button_Click(object sender, RoutedEventArgs e) 

Vielleicht ist es Ihr Problem löst.

Offtopic: Weil Sie neu sind, empfehle ich Besuch this Seite und lesen Sie sie, Stack Overflow besser zu verstehen.

Update: habe ich vergessen ".ConfigureAwait (false)"

+0

Entschuldigung @SeanStayn. Es konnte mein Problem nicht lösen. –

0

Der API-Aufruf die Benutzeroberfläche sperrt. Wenn Sie textblock1 vor dem Textblock 2 aktualisieren möchten, müssen Sie den Aufruf auf einem anderen Thread durchführen. So etwas sollte funktionieren.

//make the method async. 
private async void button_click(object sender, RoutedEventArgs e) 
{ 

//... 

//assuming userMessage is textblock2. 
userMessage.Text = await MakeAPICallAsync(); 


//... 

} 

//where MakeAPICallAsync() is another function defined as 
private async Task<string> MakeAPICallAsync() 
{ 
//API call; 
return result; 
} 
Verwandte Themen