我一直在寻找原因,但是stackoverflow上我能找到的每一个主题都提示忙碌的UI是原因。我有非常基础的代码,只是为了测试,它甚至无法更新UI,尽管我确定它不会忙于做其他事情:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
static double t = 0;
static double dt = 0.1;
private void button1_Click(object sender, RoutedEventArgs e)
{
Timer timer = new Timer(5000);
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(Update);
timer.Start();
}
void Update(object sender, ElapsedEventArgs e)
{
t = t + dt;
testBlock1.Text = (t).ToString();
}
}
我进行了调试并在
textBlock1.Text
的更新处设置了断点,每5秒就会停下来,但是UI从未更新。如代码中所示,当我将鼠标移动到用于启动计时器的Button
上时,该按钮会显示其典型的“鼠标悬停按钮”动画。为什么会发生这种情况,而文本没有更新呢?如果有人能指导我在stackoverflow上找到一个好的主题,请这样做,我将删除我的问题,但我找不到任何主题解释为什么即使UI没有忙其他事情,这种方法也不会更新UI。
t = t + dt;
之后添加(t + dt).ToString();
这一行并没有太多意义... - Adam HouldsworthTimer
是它自己的线程。你所读到的问题答案是错误的,问题在于你试图在一个单独的线程中更新UI Thread
。解决方案是在 WPF 窗口中使用Dispatcher
或在 Win32 表单中使用Invoke
。 - Security Hound