最近工作中遇到了一个场景,需要定时请求后台数据并更新到界面上,在C#中,有三种定时器:
1.System.Timers.Timer
2.System.Threading.Timer
3.System.Windows.Threading.DispatcherTimer
1,2两种方式差不多,都是用于后台定时任务,不涉及UI更新,我就是用了第二种,然后一段时间后导致cpu占满了,后来发先如果要在定时器中更新UI必须使用第三种方式,该方式可以在UI线程上触发事件,可以直接更新UI。
cpp
using System;
using System.Windows;
using System.Windows.Threading;
namespace DispatcherTimerExample
{
public partial class MainWindow : Window
{
private DispatcherTimer timer;
public MainWindow()
{
InitializeComponent();
// 创建 DispatcherTimer 实例
timer = new DispatcherTimer();
// 设置定时器间隔为1秒
timer.Interval = TimeSpan.FromSeconds(1);
// 绑定 Tick 事件处理程序
timer.Tick += Timer_Tick;
}
private void Timer_Tick(object sender, EventArgs e)
{
//更新UI
}
private void startButton_Click(object sender, RoutedEventArgs e)
{
// 启动定时器
timer.Start();
}
private void stopButton_Click(object sender, RoutedEventArgs e)
{
// 停止定时器
timer.Stop();
}
}
}