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

零下一度
Libérer: 2018-05-18 14:03:59
original
4725 Les gens l'ont consulté

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

  }
}
Copier après la connexion

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

  }
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal