当前位置: 移动技术网 > IT编程>开发语言>c# > C#中的Timer和DispatcherTimer使用实例

C#中的Timer和DispatcherTimer使用实例

2019年07月18日  | 移动技术网IT编程  | 我要评论

timer组件是基于服务器的计时器,通过设置时间间隔interval,周期性的触发elapsed事件。

用法如下:

复制代码 代码如下:

class program {
        static system.timers.timer timer1 = new system.timers.timer();
        static void main() {
            timer1.interval = 1000;
            timer1.elapsed += new elapsedeventhandler(periodictaskhandler);           
            timer1.start();
            console.readline();
        }

        static void periodictaskhandler(object sender, elapsedeventargs e) {
        string str =thread.currentthread.managedthreadid.tostring()+"##" +"timer1" +"##" + e.signaltime.tolongtimestring();
            console.writeline(str);
        }
    }

dispatchertimer:dispatcher队列中的计时器,不能保证正好在设置的时间间隔发生时执行计时器,但能保证不会在时间间隔发生之前执行计时器。这是因为  dispatchertimer的操作也是放置在dispatcher队列中的,何时执行dispatchertimer操作取决于队列中其他作业及其优先级。

在wpf应用程序中

timer的elapsed事件绑定的方法没有运行在ui线程上,如果要访问ui线程上的对象,需要利用invoke或begininvoke 将操作发布到ui线程的dispatcher上。

用法如下:

复制代码 代码如下:

private void button_click(object sender, routedeventargs e) {
            timer timer = new timer();
            timer.interval = 1000;
            timer.start();
            timer.elapsed += new elapsedeventhandler(timer_elapsed);

        }

        void timer_elapsed(object sender, elapsedeventargs e) {
            i++;
            this.dispatcher.invoke(new action(() => {
                test.content = i.tostring();
            }));
        }

        private int i = 0;

dispatchertimer与dispatcher都运行于相同的线程,并且可以在dispatchertimer上设置dispatcherpriority。

用法

复制代码 代码如下:

private void button_click(object sender, routedeventargs e) {
            timer.interval = timespan.frommilliseconds(1000);
            timer.tick += new eventhandler(timer_tick);
            timer.start();
        }

        void timer_tick(object sender, eventargs e) {
            i++;
            test.content = i.tostring();
        }

        private int i = 0;
        private dispatchertimer timer = new dispatchertimer();

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网