微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

这篇文章主要为大家详细介绍了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,相对比较麻烦。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐