[英]Text in a TextBox does not update instantly when change it in the code-behind
在下面的簡化代碼中,我希望在獲取結果時文本框中顯示“ Please wait ..”。 但是它永遠不會出現,而是文本框僅顯示functionThatTakesASecondOrTwoToRun()
ThatTakesASecondOrTwoToRun functionThatTakesASecondOrTwoToRun()
的結果
xaml ...
<Button Name="readDutButton" Content="Read DUT" Click="readDutButton_Click"/>
<TextBox Name="resultTextBox"/>
背后的代碼...。
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());
由於用戶界面阻止了該線程,因此用戶界面未更改要更新。 TaskScheduler.FromCurrentSynchronizationContext(),因此ContinueWith在UI線程上執行,並且可以訪問控件。
除了詹姆斯·辛普森的答案,這是另一種方式:
resultTextBox.Text = "Please wait...";
Dispatcher.Invoke(() => {}, DispatcherPriority.Background);
result = functionThatTakesASecondOrTwoToRun();
resultTextBox.Text = result;
TextBox.Text屬性,設置為分配的最新值。 因此,您將看不到“請稍候...”。 您可以嘗試以下方式:1.在文本框中顯示“請稍候” 2.在擁有值后隱藏“請等待”文本框,然后在另一個文本框中顯示值
方法2:您可以使用System.Threading.Thread.Sleep(1000); 在兩線之間
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.