更新文本后如何刷新textBlock Text?

How to refresh textBlock Text after updating its text?

提问人:Ali Hamza 提问时间:4/20/2017 最后编辑:Manfred RadlwimmerAli Hamza 更新时间:4/22/2017 访问量:68

问:

代码片段链接我正在用 C# 开发 Windows 8 应用程序。我的 GUI 中有 2 个 textBlocks。 我从用户那里获取文本输入,并使用 将其分配给 textBlock1。 之后,我调用了一个方法,该方法从 JSON 中的 API 获取一些数据,并使用 textBlock2 填充的部分数据,但两个文本块的文本同时更改,这是我不想要的。根据代码序列,textBlock1 的文本应该更早更改,因为 textblock2 文本更改发生在调用 API 后,大约需要 10 秒。 如何首先更改 textBlock1 的文本? 帮助我,因为我是 Windows 开发的新手。textBlock1.Text = user input;textBlock2.Text = "specific data";

C# Windows 文本块

评论

0赞 Sean Stayns 4/20/2017
如果您发布代码片段,这将有所帮助。
0赞 Ali Hamza 4/20/2017
@SeanStayn留下来,我添加了代码片段,看看。希望它能清除我正在尝试的内容
0赞 Unknown 4/20/2017
发布“populateResponses”方法的代码。

答:

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