WPF实现定时刷新UI界面功能

2025-05-29 0 61

本文实例为大家分享了WPF定时刷新UI界面展示的具体代码,供大家参考,具体内容如下

代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82
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 是无效的,即如下代码不能正常刷新界面:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81
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,相对比较麻烦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 WPF实现定时刷新UI界面功能 https://www.kuaiidc.com/99340.html

相关文章

发表评论
暂无评论