I would use the Task-based Asynchronous Pattern. await Task.Delay(2000)
is an asynchronous 'wait' it does not block the UI thread. Note the async
keyword in the method's signature.
private async void btn_play_Click(object sender, RoutedEventArgs e)
{
tb_hello.Text = "hello";
await Task.Delay(2000);
tb_goodbye.Text = "goodbye";
}