我正在创建一个wpf应用程序,可以在指定的时间内打开和关闭中继,并减少标签中剩余的时间。当我点击我的按钮时,继电器按照我的预期激发但是当循环(脚本)继续执行时,滴答事件似乎不会触发。如果我注释掉除调度程序计时器代码以外的所有代码,则计时器工作正常,按预期计数到0。我错过了什么吗?感谢。
private void btnRun_Click(object sender, RoutedEventArgs e)
{
time = TimeSpan.FromSeconds(5);
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += timer_Tick;
timer.Start();
Script script = new Script(random, relays);
script.Name = comboBoxSelectedScript.SelectedItem.ToString();
// Stuck in this loop
while (time > TimeSpan.Zero)
script.Run();
}
private void timer_Tick(object sender, EventArgs e)
{
if (time >= TimeSpan.Zero)
{
lblScriptTimeRemaining.Content = time.ToString("c");
time = time.Add(TimeSpan.FromSeconds(-1));
}
else
timer.Stop();
}
答案 0 :(得分:3)
DispatcherTimer
在UI线程上运行,而while循环阻止UI线程。因此,timer_Tick
方法将不会运行(这需要更改time
的值,并且不会出现循环)。