您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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 } }
說明:在 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 } }
也可以使用 DispatcherTimer 刷新界面,但耗時的操作不能放在DispatcherTimer的事件中執行,否則界面會卡,那么耗時的定時操作,比如查詢數據庫,需要再用一個 System.Timers.Timer,相對比較麻煩。
關于WPF如何實現定時刷新UI界面就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。