欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#中的Timer和DispatcherTimer使用实例

程序员文章站 2023-12-13 21:02:58
timer组件是基于服务器的计时器,通过设置时间间隔interval,周期性的触发elapsed事件。 用法如下: 复制代码 代码如下: class program...

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

上一篇:

下一篇: