zoukankan      html  css  js  c++  java
  • 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,相对比较麻烦。

  • 相关阅读:
    百战天虫中子弹的挖坑效果
    as3对象销毁是否需要全部属性置null?
    事件冒泡其实就是它给它的parent send一个事件
    25个Photoshop创作的励志展示
    15个免费的关于杂志的wordpress主题
    wordpress主题:New Horizon 博客/创意展示主题[v1.0.3][荐](类似瀑布流)
    linux nl命令与逻辑页
    PLSQL用DBMS_JOB建立作业
    PLSQL DBMS_DDL.ANALYZE_OBJECT
    PLSQL的UTL_FILE使用例子
  • 原文地址:https://www.cnblogs.com/s0611163/p/7110632.html
Copyright © 2011-2022 走看看