首页 > 编程 > .NET > 正文

WPF实现定时刷新UI界面功能

2024-07-10 13:32:31
字体:
来源:转载
供稿:网友

本文实例为大家分享了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,相对比较麻烦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到ASP.NET教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表