WPF定时刷新UI界面
生活随笔
收集整理的這篇文章主要介紹了
WPF定时刷新UI界面
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
代碼:
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說(shuō)明:在?System.Timers.Timer 的事件中使用?BackgroundWorker 是無(wú)效的,即如下代碼不能正常刷新界面:
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 刷新界面,但耗時(shí)的操作不能放在DispatcherTimer的事件中執(zhí)行,否則界面會(huì)卡,那么耗時(shí)的定時(shí)操作,比如查詢(xún)數(shù)據(jù)庫(kù),需要再用一個(gè)?System.Timers.Timer,相對(duì)比較麻煩。
?
轉(zhuǎn)載于:https://www.cnblogs.com/s0611163/p/7110632.html
總結(jié)
以上是生活随笔為你收集整理的WPF定时刷新UI界面的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ARM再出手,软银攀登新高山
- 下一篇: 苹果、联想及华硕均看准美国电脑运输的增长