因DispatcherTimer 产生的问题

这几天在做项目发现软件的数据有更新时,UI 层不会自动更新,以前是没问题的,通过非常久的排错,中发现就因为一句代码:timer.start(); 。就句代码让我花了好几天的时间才找出来,搞得心力交瘁。

下面有一篇网友的文字,以供参考:

silverlight多线程学习(二) DispatcherTimer     

DispatcherTimer 线程

注意要点:

一、能直接访问并操作UI界面元素。

二、需要注意会造成UI线程阻塞,就是界面卡机的情况。

可以理解为占用UI线程,因为它可以直接访问并更新UI。这种线程一般不推荐使用。这种线程实际上会造成UI线程的阻塞,其它线程也可以造成线程阻塞。主要是这种线程在它的Tick事件中执行的都是占用UI线程,也就是说它在执行定时器事件的时候会和UI界面线程同步。如果是后台线程使用的不当,写的不好的话。其线程也会造成页面卡机。以上是个人初学的理解。

其特点是使用方便可以直接访问并操作UI界面元素。

下面是silverlight实例代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using System.Windows.Threading;

namespace 多线程

{

    public partial class MainPage : UserControl

    {

        public MainPage()

        {

            InitializeComponent();

            this.Loaded += new RoutedEventHandler(MainPage_Loaded);

        } 

        void MainPage_Loaded(object sender, RoutedEventArgs e)

        {

            DispatcherTimer timer = new DispatcherTimer();//定时器 

            timer.Interval = TimeSpan.FromSeconds(1.0);//设置间隔时间 

            timer.Tick += new EventHandler((s, ee) =>//使用Lambda 表达式

            {

                //更新文本值

                this.textBox1.Text = DateTime.Now.ToString();

            });

            ////也可以如下写法

            //timer.Tick += new EventHandler(timer_Tick);   

            timer .Start ();//开始定时器    

        }

 

        //void timer_Tick(object sender, EventArgs e)

        //{

        //    //更新文本值

        //    this.textBox1.Text = DateTime.Now.ToString();

        //}

    }

}

 链接:http://blog.csdn.net/gzy11/article/details/6459578

posted on 2013-08-15 17:12  cloudfee  阅读(670)  评论(0编辑  收藏  举报