WPF - 调度程序未按预期工作 - 速度变慢
本文关键字:工作 速度 调度程序 WPF | 更新日期: 2023-09-27 18:32:00
我在更新 wpf 应用程序的窗口时遇到问题。在谷歌上搜索了很长时间后,我将问题分解为以下示例。我希望你能帮助我。
假设我们有一个带有按钮和文本块的窗口......没什么特别的:
...
<Grid>
<Button ... Click="button_Click"/>
<TextBox x:Name="textBox" Text="DefaultText" .../>
</Grid>
...
button_Click是一个简单的事件,如下所示:
private void button_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 20; i++)
{
textBox.Dispatcher.Invoke(new Action(() => textBox.Text = i.ToString());
}
}
这是我的问题。如果我调试循环,我的文本块的文本始终是"默认文本"。只有在我的循环结束时,文本是"19"。为什么我的调度程序无法更改文本?就像这里描述的那样(Invoke() 和 BeginInvoke()有什么区别),调度程序应该停止我的线程,直到工作完成。我尝试了不同的调度程序优先级...但没有区别。我的问题是什么?
谢谢你帮助我。
适用于在调试期间四处寻找其慢速 WPF 应用程序解决方案的任何人;
实例化 DispatcherTimer 对象时,请使用 DispatcherPriority.Send 作为参数。这会将 UI 的优先级设置得更高,从而使应用程序或游戏在调试时运行更流畅。源
DispatcherTimer gameTimer = new DispatcherTimer(DispatcherPriority.Send);
我希望这将在未来帮助其他人:)