WPF定时刷新UI界面

2021-06-09 20:04

阅读:411

标签:hide   patch   open   ring   start   worker   rgs   无效   charts   

原文: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 list = new List();

                    list = HI.Get().GetListPage(null, DateTime.MinValue, DateTime.MinValue, 1, 50, ref total);

                    Dispatcher.Invoke(new Action(() =>
                    {
                        noticeListView.ItemsSource = list;
                    }));
                }
                catch
                {

                }
            });
        }
        #endregion

    }
}
View Code

说明:在 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 taskList = new List();

            BackgroundWorker worker = new BackgroundWorker();
            worker.DoWork += (s, e) =>
            {
                user = HI.Get().UserCache.GetCurrentUserInfo();
                taskList = HI.Get().GetCombatTaskByUserIDUnfinished(user.ID.ToString());

            };
            worker.RunWorkerCompleted += (s, e) =>
            {
                try
                {
                    taskListView.ItemsSource = taskList;
                }
                catch { }
            };
            worker.RunWorkerAsync();
        }
        #endregion

    }
}
View Code

也可以使用 DispatcherTimer 刷新界面,但耗时的操作不能放在DispatcherTimer的事件中执行,否则界面会卡,那么耗时的定时操作,比如查询数据库,需要再用一个 System.Timers.Timer,相对比较麻烦。

 

WPF定时刷新UI界面

标签:hide   patch   open   ring   start   worker   rgs   无效   charts   

原文地址:https://www.cnblogs.com/lonelyxmas/p/10641796.html


评论


亲,登录后才可以留言!