2017-04-19 40 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; 
}