如何在单击按钮期间更改 TextBlock 文本?
How do I change a TextBlock Text during Buton Click?
我想在 WPF 中的 Button_Click
期间更改 TextBlock
的文本。
我试过了,但没用:
private void Button_Click(object sender, RoutedEventArgs e)
{
myTextBlock.Text = "Status: Not ready";
//Do Something
myTextBlock.Text = "Status: Ready";
}
Button_Click
从 UI 线程中调用。这意味着执行的代码将阻止更新您的 UI。一个简单的解决方案是使用 async
和 await
以及一个新线程来 运行 您的阻塞操作。这允许 UI 线程在阻塞操作期间更新 UI。
private async void Button_Click(object sender, RoutedEventArgs e)
{
myTextBlock.Text = "Status: Not ready";
await Task.Run(() =>
{
//Your code here
}).ConfigureAwait(true);
myTextBlock.Text = "Status: Ready";
}
注意需要添加ConfigureAwait(true)
才能再次使用UI线程第二次更新正文
您需要将注释 //Do Something
替换为一些在另一个线程上实际执行某些操作的代码。如果不这样做,您将永远没有机会看到 "Status: Not ready" 消息,因为 Text
属性 将在您单击 [ 后几乎立即设置为 "Status: Ready" =14=].
试试这个:
private async void Button_Click(object sender, RoutedEventArgs e)
{
myTextBlock.Text = "Status: Not ready";
await Task.Delay(3000); //wait asynchronously for 3 seconds..
myTextBlock.Text = "Status: Ready";
}
在您确认这按预期工作后,您可能想要开始一项任务,按照@Fruchtzwerg 的建议做一些有意义的事情。 ConfigureAwait(true)
在这里是多余的:
await Task.Run(() =>
{
//Do something
});
为了避免在线程中写入所有处理,我这样做了:
private async void Button_Click(object sender, RoutedEventArgs e)
{
myTextBlock.Text = "Status: Not ready";
await Task.Run(() =>
{
Thread.Sleep(1000);
}).ConfigureAwait(true);
//Do your processing
Treatment();
myTextBlock.Text = "Status: Ready";
}
我想在 WPF 中的 Button_Click
期间更改 TextBlock
的文本。
我试过了,但没用:
private void Button_Click(object sender, RoutedEventArgs e)
{
myTextBlock.Text = "Status: Not ready";
//Do Something
myTextBlock.Text = "Status: Ready";
}
Button_Click
从 UI 线程中调用。这意味着执行的代码将阻止更新您的 UI。一个简单的解决方案是使用 async
和 await
以及一个新线程来 运行 您的阻塞操作。这允许 UI 线程在阻塞操作期间更新 UI。
private async void Button_Click(object sender, RoutedEventArgs e)
{
myTextBlock.Text = "Status: Not ready";
await Task.Run(() =>
{
//Your code here
}).ConfigureAwait(true);
myTextBlock.Text = "Status: Ready";
}
注意需要添加ConfigureAwait(true)
才能再次使用UI线程第二次更新正文
您需要将注释 //Do Something
替换为一些在另一个线程上实际执行某些操作的代码。如果不这样做,您将永远没有机会看到 "Status: Not ready" 消息,因为 Text
属性 将在您单击 [ 后几乎立即设置为 "Status: Ready" =14=].
试试这个:
private async void Button_Click(object sender, RoutedEventArgs e)
{
myTextBlock.Text = "Status: Not ready";
await Task.Delay(3000); //wait asynchronously for 3 seconds..
myTextBlock.Text = "Status: Ready";
}
在您确认这按预期工作后,您可能想要开始一项任务,按照@Fruchtzwerg 的建议做一些有意义的事情。 ConfigureAwait(true)
在这里是多余的:
await Task.Run(() =>
{
//Do something
});
为了避免在线程中写入所有处理,我这样做了:
private async void Button_Click(object sender, RoutedEventArgs e)
{
myTextBlock.Text = "Status: Not ready";
await Task.Run(() =>
{
Thread.Sleep(1000);
}).ConfigureAwait(true);
//Do your processing
Treatment();
myTextBlock.Text = "Status: Ready";
}