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.Timer未更新的间隔时间

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();

我不知道你想要什么样的行为,但我希望这对你有帮助。