WPF定时刷新UI界面

2017-07-03 19:57:10来源:cnblogs.com作者:秋荷雨翔人点击

代码:

using NHibernate.Criterion;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.ComponentModel;using System.Data;using System.Linq;using System.Text;using System.Threading;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using Visifire.Charts;namespace SunCreate.CombatPlatform.Client{    public partial class MainPage : UserControl    {        private System.Timers.Timer timerNotice = null;        public MainPage()        {            InitializeComponent();        }        private void MainPage_Loaded(object sender, RoutedEventArgs e)        {            #region 通知公告            if (timerNotice == null)            {                BindNotice();                timerNotice = new System.Timers.Timer();                timerNotice.Elapsed += new System.Timers.ElapsedEventHandler((o, eea) =>                {                    BindNotice();                });                timerNotice.Interval = 60 * 1000;                timerNotice.Start();            }            #endregion        }        private void MainPage_SizeChanged(object sender, SizeChangedEventArgs e)        {        }        #region 绑定通知公告        private void BindNotice()        {            System.Threading.Tasks.Task.Factory.StartNew(() =>            {                try                {                    int total = 0;                    TES_NOTICE info = new TES_NOTICE();                    IList<TES_NOTICE> list = new List<TES_NOTICE>();                    list = HI.Get<INoticeService>().GetListPage(null, DateTime.MinValue, DateTime.MinValue, 1, 50, ref total);                    Dispatcher.Invoke(new Action(() =>                    {                        noticeListView.ItemsSource = list;                    }));                }                catch                {                }            });        }        #endregion    }}

说明:在 System.Timers.Timer 的事件中使用 BackgroundWorker 是无效的,即如下代码不能正常刷新界面:

using NHibernate.Criterion;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.ComponentModel;using System.Data;using System.Linq;using System.Text;using System.Threading;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using Visifire.Charts;namespace SunCreate.CombatPlatform.Client{    public partial class MainPage : UserControl    {        private System.Timers.Timer timerNotice = null;        public MainPage()        {            InitializeComponent();        }        private void MainPage_Loaded(object sender, RoutedEventArgs e)        {            #region 通知公告            if (timerNotice == null)            {                BindNotice();                timerNotice = new System.Timers.Timer();                timerNotice.Elapsed += new System.Timers.ElapsedEventHandler((o, eea) =>                {                    BindNotice();                });                timerNotice.Interval = 60 * 1000;                timerNotice.Start();            }            #endregion        }        private void MainPage_SizeChanged(object sender, SizeChangedEventArgs e)        {        }        #region 绑定通知公告        private void BindNotice()        {            PT_USER_INFO user = new PT_USER_INFO();            IList<TES_COMBAT_TASK> taskList = new List<TES_COMBAT_TASK>();            BackgroundWorker worker = new BackgroundWorker();            worker.DoWork += (s, e) =>            {                user = HI.Get<Cache.ICacheService>().UserCache.GetCurrentUserInfo();                taskList = HI.Get<ITaskService>().GetCombatTaskByUserIDUnfinished(user.ID.ToString());            };            worker.RunWorkerCompleted += (s, e) =>            {                try                {                    taskListView.ItemsSource = taskList;                }                catch { }            };            worker.RunWorkerAsync();        }        #endregion    }}

也可以使用 DispatcherTimer 刷新界面,但耗时的操作不能放在DispatcherTimer的事件中执行,否则界面会卡,那么耗时的定时操作,比如查询数据库,需要再用一个 System.Timers.Timer,相对比较麻烦。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台