• Wp7下的Timer DispatcherTimer使用


    最近在写一个缓存项目中,使用定期刷新缓存机制,我想在项目后台创建一个定时器,来实现定期的刷新缓存,当我准备写时,开始考虑用线程去实现,毕竟线程有个Sleep功能,我让线程一直开启,然后睡眠来暂停刷新,前台UI当然可以实现,但是最后想想感觉线程一直在运行,会不会给内存负载变大,于是我就该用Timer,而且使用起来比较简单,但是在写到Timer时我犹豫了一下,是Timer好还是DispatcherTimer好呢?我开始不是很清楚,后来网上搜搜看到了:

    DispatcherTimer属于UI线程,Timer非UI线程,运行在后台,如果要调用的话要使用Dispatcher.BeginInvoke()方法;

    正是由于DispatcherTimer的运行在UI线程上的,所以问题就出来了,在DispatcherTimer里面执行等待动作或者时间过长,

    可能会导致UI假死,所以我就用Timer了最后,但是发现使用 TimerCallback 委托指定希望 Timer 执行的方法。 计时器委托在构造计时器时指定,并且不能更改。 此方法不在创建计时器的线程上执行,而是在系统提供的 ThreadPool 线程上执行。这样一来内存开销会不会有变大了呢??(希望知道的讲解下) 下面是简单的两个类的在WP7.1下使用方法:

     1   public partial class MainPage : PhoneApplicationPage
     2     {
     3         DispatcherTimer timer = null;
     4         Timer timer2 = null;
     5 
     6         // 构造函数
     7         public MainPage()
     8         {
     9             InitializeComponent();
    10 
    11             timer = new DispatcherTimer();
    12             timer.Interval = TimeSpan.FromSeconds(3);
    13             timer.Tick+=new EventHandler(timer_Tick);
    14             timer.Start();
    15 
    16 
    17             timer2= new Timer(CallBalk,text,3000,1000);
    18         }
    19 
    20         void CallBalk(object  state)
    21         {
    22             //Dispatcher.BeginInvoke();
    23             Debug.WriteLine("Timer");
    24         }
    25         void timer_Tick(object sender,EventArgs e)
    26         {
    27             Debug.WriteLine(DateTime.Now.ToShortTimeString());
    28             Debug.WriteLine("DispatcherTimer");
    29         }
    30     }

    另外:Timer方法可以通过使用 Change 方法更改这些值或禁用计时器。

    以上是本人的一个学习过程,希望大家拍砖!!

     

  • 相关阅读:
    压缩感知中的lp球:p范数最优化为什么总会导致一个稀疏的解的原因
    有限等距性质RIP
    P问题、NP问题、NPC问题
    浅读K-means
    Python初学——pickle & set
    Python初学——窗口视窗Tkinter
    Python初学——多进程Multiprocessing
    暴力【bzoj2208】: [Jsoi2010]连通数
    打表数学【bzoj2173】: 整数的lqp拆分
    最短路【bzoj1726】: [Usaco2006 Nov]Roadblocks第二短路
  • 原文地址:https://www.cnblogs.com/Yukang1989/p/2663499.html
Copyright © 2020-2023  润新知