• 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
    
        }
    }
    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<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
    
        }
    }
    View Code

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

  • 相关阅读:
    Datatables 在asp.net mvc中的使用
    nexus离线安装索引及一些问题
    享元模式
    My97DatePicker的使用
    oracle定时器,调用存储过程,定时从n张表中取值新增到本地一张表中
    oracle触发器,一个表新增、修改的同时同步另一张表
    plsql客户端显示菜单等
    telnet测试制定地址端口号
    mybatis新增数据后获取自增主键
    ajax提交表单
  • 原文地址:https://www.cnblogs.com/s0611163/p/7110632.html
Copyright © 2020-2023  润新知