C# 当在代码隐藏中更改文本框时,文本框中的文本不会立即更新
在下面的简化代码中,我希望在获取结果时文本框显示“请稍候…”。但是,它从未出现,相反,文本框只显示采用sasecondortworun()的C# 当在代码隐藏中更改文本框时,文本框中的文本不会立即更新,c#,wpf,C#,Wpf,在下面的简化代码中,我希望在获取结果时文本框显示“请稍候…”。但是,它从未出现,相反,文本框只显示采用sasecondortworun()的函数的结果。 xaml <Button Name="readDutButton" Content="Read DUT" Click="readDutButton_Click"/> <TextBox Name="resultTextBox"/> Text属性,设置为分配的最新值。因此,您无法看到“请稍候…”。您可以尝试以下方法: 1.
函数的结果。
xaml
<Button Name="readDutButton" Content="Read DUT" Click="readDutButton_Click"/>
<TextBox Name="resultTextBox"/>
Text属性,设置为分配的最新值。因此,您无法看到“请稍候…”。您可以尝试以下方法: 1.在文本框中显示“请稍候” 2.获得值后隐藏“请等待”文本框,并在另一个文本框中显示该值 方法2: 可以使用System.Threading.Thread.Sleep(1000);在字里行间
希望这有帮助。工作需要在后台线程中进行,例如
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并访问控件。除了James Simpson的答案之外,还有另一种方法:
resultTextBox.Text = "Please wait...";
Dispatcher.Invoke(() => {}, DispatcherPriority.Background);
result = functionThatTakesASecondOrTwoToRun();
resultTextBox.Text = result;
接受sasecondortworun()的
函数的返回类型可能重复代码>?也可以使用x:Name
而不是Name
。请参阅以供参考。它不是重复的,因为所引用的问题是针对一个我不知道如何转换为我的案例的特定案例。等等,在其中一个地方,它不起作用,因为它读取另一个文本框的值,当我尝试在使用SecondorTwoToRun()的函数中访问另一个文本框时,我遇到异常
“调用线程无法访问此对象,因为其他线程拥有它。”}System.Exception{System.InvalidOperationException}首先在任务外部获取这些值,并将其传递到函数中。没问题,欢迎!
resultTextBox.Text = "Please wait...";
Dispatcher.Invoke(() => {}, DispatcherPriority.Background);
result = functionThatTakesASecondOrTwoToRun();
resultTextBox.Text = result;