Maison  >  Article  >  développement back-end  >  Explication détaillée d'exemples d'interface utilisateur régulièrement actualisée dans WPF

Explication détaillée d'exemples d'interface utilisateur régulièrement actualisée dans WPF

零下一度
零下一度original
2018-05-18 14:03:594663parcourir

Cet article présente principalement la fonction d'actualisation régulière de l'interface utilisateur dans WPF. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

L'exemple de cet article partage avec vous l'actualisation régulière de WPF. . Le code spécifique affiché sur l'interface utilisateur est pour votre référence. Le contenu spécifique est le suivant

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

  }
}

Instructions : Utilisez Contexte dans l'événement. de System.Timers.Timer Worker n'est pas valide, c'est-à-dire que le code suivant ne peut pas actualiser l'interface normalement :

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

  }
}

Vous pouvez également utiliser DispatcherTimer pour actualiser l'interface, mais les opérations fastidieuses ne peuvent pas être exécutées dans l'événement DispatcherTimer, sinon l'interface sera bloquée, ce qui prendra beaucoup de temps. Pour les opérations planifiées, telles que interroger la base de données , vous devez utiliser un autre System.Timers.Timer, qui. est relativement gênant.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn