我创建了2个计时器,dispatcherTimer.Interval
应该在dispatcherTimer2
的EventHandler中进行更新。我已经为计时器设置了一个默认值,在运行代码时,我可以看到它已经更新,但在默认间隔后调用了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,并检查使用一些DateTime.Now函数调用EventHandler的时间。问题仍然存在。如果有人想要我会提出DispatcherTimer代码。我没有替换编辑中的Timers.Timer
代码,因为它会改变问题。除语法外,它基本相同。代码结构相同。
编辑:如果我删除了定时器间隔的默认初始化,它只是连续调用EventHandler
。但同时第二个定时器事件处理程序也被调用,它又会更新第一个定时器的间隔。但它永远不会被使用。
我无法理解我做错了什么。
答案 0 :(得分:0)
System.Timers.Timer对线程池中的滴答进行排队,因此当转定时器的Enabled = false时,您无法确定它是否停止。
您可以尝试在开始时设置AutoReset = false。这样可以确保您的计时器只运行一次,但您可以在刻度代码中再次手动启动它们。
dispatcherTimer.AutoReset = false;
dispatcherTimer2.AutoReset = false;
然后你可以在dispatcherTimer_Tick2中用这个替换你的定时器代码再次启动定时器。
dispatcherTimer.Interval = (videoMin - min) * 60 * 1000;
dispatcherTimer.Start();
并且在dispatcherTimer_Tick结束时也是
dispatcherTimer.Start();
我不确定你想要什么样的行为,但我希望这会对你有所帮助。