2017-04-19 66 views
-2

code snippet link我正在C#中開發Windows 8應用程序。我的GUI中有2個textBlocks。 我從用戶獲得文本輸入並使用textBlock1.Text = user input;將其分配給textBlock1。 之後,我調用一個方法從JSON中獲取一些API數據,並使用textBlock2.Text = "specific data"; 在textBlock2中填充部分數據,但兩個文本塊的文本都會在不需要的同時更改。根據代碼序列textBlock1的文本應該更早更改,因爲在調用API約10秒後發生textblock2文本更改。 如何首先更改textBlock1的文本? 幫助我,因爲我是windows開發新手。如何在更新文本後刷新textBlock文本?

+0

這將有助於,如果你張貼代碼片段。 –

+0

@SeanStayn stayn我已添加代碼段看看。希望它清除我想要的 –

+0

發佈'populateResponses'方法的代碼。 – Unknown

回答

0

在你的方法,你可以使用

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

如果你調用一個異步方法,您應使用等待語句中,如果代碼應等待方法調用,就像這樣:

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

但對於這一點,您必須在方法更改爲異步:

private async void button_Click(object sender, RoutedEventArgs e) 

也許,它解決您的問題。

Offtopic:因爲你是新手,我建議訪問this頁面並閱讀它們,以更好地理解Stack Overflow。

更新: 我忘了 「.ConfigureAwait(假)」

+0

對不起@SeanStayn。它無法解決我的問題。 –

0

API調用鎖定UI。如果你想在textblock 2之前更新textblock1,你必須在不同的線程上進行調用。 像這樣的東西應該工作。

//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; 
}