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

时间:2015-02-25 22:07:58

标签: c# wpf

在下面的简化代码中,我希望文本框说出"请稍候.."而结果正在被提取。但是它永远不会出现,而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;
    }

3 个答案:

答案 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);在行之间

希望这有帮助。