System.Timers.Timer未更新的间隔时间
本文关键字:时间 更新 Timers Timer System | 更新日期: 2023-09-27 17:54:06
我已经创建了2个定时器,dispatcherTimer.Interval
应该在dispatcherTimer2
的eventandler中更新。我已经为计时器设置了默认值,并且在运行代码时,我可以看到它正在更新,但是EventHandler, dispatcherTimer_Tick
在默认间隔后被调用。我不能解决这个问题。
我在哪里做错了,我如何解决这个问题?
System.Timers.Timer dispatcherTimer = new System.Timers.Timer();
dispatcherTimer.Elapsed += dispatcherTimer_Tick;
System.Timers.Timer dispatcherTimer2 = new System.Timers.Timer();
dispatcherTimer2.Elapsed += dispatcherTimer_Tick2;
dispatcherTimer2.Interval = 10000;
dispatcherTimer2.Start();
dispatcherTimer.Interval = 120000;
dispatcherTimer.Start();
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
VideoPlay.Dispatcher.Invoke(new Action(() =>
{
VideoPlay.Source = new Uri("http://download.wavetlan.com/SVV/Media/HTTP/H264/Talkinghead_Media/H264_test2_Talkinghead_mp4_480x320.mp4");
}));
}
private void dispatcherTimer_Tick2(object sender, EventArgs e)
{
//System.Windows.MessageBox.Show(VideoDay + VideoHr.ToString()+videoMin.ToString());
if(hourparameter==VideoHr && minparameter==videoMin && dayparameter==VideoDay)
{
return;
}
else
{
if (VideoHr == hour)
{
if (day == VideoDay)
{
if (videoMin > min)
{
dispatcherTimer.Enabled = false;
dispatcherTimer = new System.Timers.Timer();
dispatcherTimer.Interval = (videoMin - min) * 60 * 1000;
System.Windows.MessageBox.Show(dispatcherTimer.Interval.ToString());
dispatcherTimer.Enabled = true;
}
编辑:我再次尝试了DispatcherTimer,并检查了eventhandler被一些DateTime调用的时间。现在的功能。问题仍然存在。如果有人想要,我会提供DispatcherTimer代码。我没有在编辑中替换Timers.Timer
代码,因为它会改变问题。除了语法不同,基本上是一样的。代码的结构相同。
EventHandler
。但与此同时,第二个计时器eventandler也被调用,它依次更新第一个计时器的Interval。但它从未被使用过。我不明白我做错了什么。
System.Timers。定时器队列在线程池中滴答,所以你不能确定它停止时,转动定时器的启用= false。
您可以尝试在开始时设置AutoReset = false。这可以确保你的计时器只运行一次,但你必须在tick代码中再次手动启动它们。
dispatcherTimer.AutoReset = false;
dispatcherTimer2.AutoReset = false;
然后你可以用dispatcherTimer_Tick2中的这个替换你的计时器代码来再次启动计时器。
dispatcherTimer.Interval = (videoMin - min) * 60 * 1000;
dispatcherTimer.Start();
在dispatcherTimer_Tick的末尾也是
dispatcherTimer.Start();
我不知道你想要什么样的行为,但我希望这对你有帮助。