求教Timer用法

名字委婉点 2014-03-07 03:51:42
我有一段代码,我想让他10秒钟刷新一次,总时间2分钟。

等2分钟过了就关闭计时器。


在test方法里面,开始执行timer 10秒钟刷新一次,超过2分钟,就关闭timer,走出test方法继续往下走


startTime = Datetimer.Now;
private void test(test)
{


//自动抄表定时器
AutoMeterTimeTimer = new System.Timers.Timer();
AutoMeterTimeTimer.Elapsed += new System.Timers.ElapsedEventHandler(AutoMeterTimeTimer_Elapsed);
AutoMeterTimeTimer.Interval = 1000;
AutoMeterTimeTimer.Start();

}

//最终抄表结果
private void AutoRecordReport()
{}

void AutoMeterTimeTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
AutoMeterTimeTimer.Enabled = false;

if ((DateTime.Now - startTime).TotalMinutes < 2)
{
AutoRecordReport();
AutoMeterTimeTimer.Enabled = true;
}
else
{
AutoMeterTimeTimer.Enabled = false;
}

}

...全文
127 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
HappyOnTheRoad 2014-03-07
  • 打赏
  • 举报
回复

class Test
    {

        System.Timers.Timer AutoMeterTimeTimer;
        DateTime startTime = DateTime.Now;
        public  void test()
        {
            //自动抄表定时器
            AutoMeterTimeTimer = new System.Timers.Timer();
            AutoMeterTimeTimer.Elapsed += new System.Timers.ElapsedEventHandler(AutoMeterTimeTimer_Elapsed);
            AutoMeterTimeTimer.Interval = 10000;
            AutoMeterTimeTimer.Start();
            while (AutoMeterTimeTimer.Enabled)
            {
                Application.DoEvents();
                Thread.Sleep(1000);
            }
        }

        //最终抄表结果
        private void AutoRecordReport()
        { }

        void AutoMeterTimeTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if ((DateTime.Now - startTime).TotalMinutes < 2)
            {
                AutoRecordReport();
            }
            else
            {
                AutoMeterTimeTimer.Close();
            }
        }
    }
名字委婉点 2014-03-07
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
AutoMeterTimeTimer = new System.Timers.Timer(); AutoMeterTimeTimer.Elapsed += new System.Timers.ElapsedEventHandler(AutoMeterTimeTimer_Elapsed); AutoMeterTimeTimer.Interval = 1000; AutoMeterTimeTimer.Start(); while (AutoMeterTimeTimer.Enabled) { Application.DoEvents(); Thread.Sleep(100); } 后面的代码
还是会并行走其他方法
saybookcat 2014-03-07
  • 打赏
  • 举报
回复
Task.Factory.StartNew(() => { //TODO 循环+后续方法 }); 以上相当于新起了一个异步线程,不会阻塞UI 至于await async 我想你用不到了 task http://msdn.microsoft.com/zh-cn/library/system.threading.tasks.task(v=vs.110).aspx
threenewbee 2014-03-07
  • 打赏
  • 举报
回复
AutoMeterTimeTimer = new System.Timers.Timer(); AutoMeterTimeTimer.Elapsed += new System.Timers.ElapsedEventHandler(AutoMeterTimeTimer_Elapsed); AutoMeterTimeTimer.Interval = 1000; AutoMeterTimeTimer.Start(); while (AutoMeterTimeTimer.Enabled) { Application.DoEvents(); Thread.Sleep(100); } 后面的代码
名字委婉点 2014-03-07
  • 打赏
  • 举报
回复
引用 2 楼 saybookcat 的回复:
await async Task
能具体点吗
saybookcat 2014-03-07
  • 打赏
  • 举报
回复
await async Task
名字委婉点 2014-03-07
  • 打赏
  • 举报
回复
我现在的问题是, 程序边执行test,将test继续往下走,然后timer也在走。 我只想将timer走完 再继续将test 后面的其他方法

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧