提问人:Ali Hamza 提问时间:4/20/2017 最后编辑:Manfred RadlwimmerAli Hamza 更新时间:4/22/2017 访问量:68
更新文本后如何刷新textBlock Text?
How to refresh textBlock Text after updating its text?
问:
代码片段链接我正在用 C# 开发 Windows 8 应用程序。我的 GUI 中有 2 个 textBlocks。
我从用户那里获取文本输入,并使用 将其分配给 textBlock1。
之后,我调用了一个方法,该方法从 JSON 中的 API 获取一些数据,并使用 textBlock2 填充的部分数据,但两个文本块的文本同时更改,这是我不想要的。根据代码序列,textBlock1 的文本应该更早更改,因为 textblock2 文本更改发生在调用 API 后,大约需要 10 秒。
如何首先更改 textBlock1 的文本?
帮助我,因为我是 Windows 开发的新手。textBlock1.Text = user input;
textBlock2.Text = "specific data";
答:
0赞
Sean Stayns
4/20/2017
#1
在你的方法中,你使用
HttpResponseMessage response = client.GetAsync(userInput).Result;
string result = response.Content.ReadAsStringAsync().Result;
如果调用 Async 方法,则应使用 await 语句(如果代码应等待方法调用),如下所示:
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)
也许,它解决了你的问题。
题外话:因为你是新手,我建议你访问这个页面并阅读它们,以更好地了解 Stack Overflow。
更新: 我忘了”。ConfigureAwait(false)”
0赞
anserk
4/20/2017
#2
API 调用会锁定 UI。如果要在文本块 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;
}
评论