簡體   English   中英

當在后面的代碼中更改文本框時,文本框中的文本不會立即更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM