在代码隐藏中更改TextBox时,TextBox中的文本不会立即更新

在下面的简化代码中,我希望文本框在获取结果时说“请稍候……”。 但它永远不会出现,而textBox只显示functionThatTakesASecondOrTwoToRun()的结果

XAML …

 

代码背后….

  private void readDutButton_Click(object sender, RoutedEventArgs e) { resultTextBox.Text = "Please wait..."; # this never appears result = functionThatTakesASecondOrTwoToRun(); resultTextBox.Text = result; } 

工作需要在后台线程中进行,例如

 resultTextBox.Text = "Please wait..."; // this never appears Task.Factory.StartNew(() => functionThatTakesASecondOrTwoToRun()) .ContinueWith((t) => resultTextBox.Text = t.Result, TaskScheduler.FromCurrentSynchronizationContext()); 

由于UI阻塞了线程,因此UI未进行更新更新。 TaskScheduler.FromCurrentSynchronizationContext()因此,在UI线程上执行ContinueWith并可以访问控件。

除了詹姆斯辛普森的回答,这是另一种方式:

 resultTextBox.Text = "Please wait..."; Dispatcher.Invoke(() => {}, DispatcherPriority.Background); result = functionThatTakesASecondOrTwoToRun(); resultTextBox.Text = result; 

TextBox.Text属性,设置为分配的最新值。 因此,您无法看到“请稍候……”。 您可以尝试以下方式:1。在文本框中显示“请稍候”2.获取值后隐藏“请稍候”文本框并在另一个文本框中显示该值

方法2:您可以使用System.Threading.Thread.Sleep(1000); 在两行之间

希望这可以帮助。