WPF实现定时刷新UI界面的实例详解

互联网 18-5-18
这篇文章主要为大家详细介绍了WPF实现定时刷新UI界面功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了WPF定时刷新UI界面展示的具体代码,供大家参考,具体内容如下

代码:

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,相对比较麻烦。

以上就是WPF实现定时刷新UI界面的实例详解的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 刷新
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:ASP.NET Core中新功能--环境变量和启动设置

相关资讯