Home  >  Article  >  Backend Development  >  Detailed explanation of examples of regularly refreshing UI interface in WPF

Detailed explanation of examples of regularly refreshing UI interface in WPF

零下一度
零下一度Original
2018-05-18 14:03:594718browse

This article mainly introduces the function of WPF to implement scheduled refresh of UI interface in detail. It has certain reference value. Interested friends can refer to it.

The example of this article shares with everyone the scheduled refresh of WPF. The specific code displayed on the UI interface is for your reference. The specific content is as follows

Code:

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

  }
}

Description: Use BackgroundWorker in the event of System.Timers.Timer Yes Invalid, that is, the following code cannot refresh the interface normally:

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

  }
}

You can also use DispatcherTimer to refresh the interface, but time-consuming operations cannot be performed in the events of DispatcherTimer, otherwise the interface will be stuck, so time-consuming scheduled operations , For example, querying the database requires another System.Timers.Timer, which is relatively troublesome.

The above is the detailed content of Detailed explanation of examples of regularly refreshing UI interface in WPF. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn