c语言编程笔录

首页 >   > 笔记大全

笔记大全

WPF实现定时刷新UI界面的实例详解

更新时间:2023-12-08

概述

在开发WPF应用程序时,我们经常遇到需要实时刷新UI界面的需求,这时候我们可以利用WPF的专有线程Dispatcher来实现。Dispatcher是UI线程中用于显示、处理窗口消息的对象,我们可以利用该对象在UI线程上进行定时操作,实现UI实时刷新。

使用Timer控件定时刷新UI

最常见的定时刷新UI的方式,就是运用Timer控件。我们可以在合适的时机启动一个定时器,然后在该定时器的事件回调函数中,通过Dispatcher对象在UI线程上调用更新UI的函数,代码如下:

private Timer timer;
private void StartTimer()
{
    timer = new Timer(1000);   // 刷新时间间隔为1秒钟
    timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    timer.Enabled = true;
}

private void OnTimedEvent(object source, ElapsedEventArgs e)
{
    // 判断当前是否在UI线程上
    if (!Dispatcher.CheckAccess())
    {
        Dispatcher.Invoke(() =>
        {
            // 调用UI更新函数
        });
    }
    else
    {
        // 调用UI更新函数
    }
}

使用Task定时刷新UI

除了利用Timer控件来实现定时刷新UI的功能,还可以利用Task的Delay方法进行延迟操作。我们可以在UI线程上开启一个Task,并通过Delay方法在指定的时间后执行UI更新操作,代码如下:

private async void StartTask()
{
    while (true)
    {
        await Task.Delay(1000);   // 刷新时间间隔为1秒钟
        // 判断当前是否在UI线程上
        if (!Dispatcher.CheckAccess())
        {
            Dispatcher.Invoke(() =>
            {
                // 调用UI更新函数
            });
        }
        else
        {
            // 调用UI更新函数
        }
    }
}

使用DispatcherTimer定时刷新UI

DispatcherTimer是WPF专用的定时器控件,可以在UI线程上进行定时操作。我们可以在代码中新建一个DispatcherTimer控件,并指定时间间隔及回调函数,代码如下:

private DispatcherTimer timer;
private void StartDispatcherTimer()
{
    timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(1);   // 刷新时间间隔为1秒钟
    timer.Tick += new EventHandler(OnDispatcherTimerTick);
    timer.Start();
}

private void OnDispatcherTimerTick(object sender, EventArgs e)
{
    // 调用UI更新函数
}