在下面的简化代码中,我希望文本框说出"请稍候.."而结果正在被提取。但是它永远不会出现,而textBox只显示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;
}
答案 0 :(得分:2)
工作需要在后台线程中进行,例如
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并可以访问控件。
答案 1 :(得分:1)
除了詹姆斯辛普森的回答,这是另一种方式:
resultTextBox.Text = "Please wait...";
Dispatcher.Invoke(() => {}, DispatcherPriority.Background);
result = functionThatTakesASecondOrTwoToRun();
resultTextBox.Text = result;
答案 2 :(得分:0)
TextBox.Text属性,设置为分配的最新值。因此,您无法看到“请稍候......”。您可以尝试以下方式: 1.在文本框中显示请稍候 2.获得值后隐藏请等待文本框,并在另一个文本框中显示值
方法2: 你可以使用System.Threading.Thread.Sleep(1000);在行之间
希望这有帮助。