74.时间显示的两种方法 WPF例子 C#例子

第一种方法

在实现时间显示的几种方法中,第一种方法源自Visual Studio的自动提示。在VS2022更新之后,开发体验仿佛被提升到了极致------注释自动生成,代码自动生成,程序员的大脑似乎都被解放了。正是在这样的背景下,我们设计了一个异步方法,其内部包含一个死循环,以高频率将当前时间实时更新到前台显示。这种方法简洁高效,代码清晰易懂。

cs 复制代码
        //显示时间的函数
        public async Task DisplayTime()
        {
            //循环显示时间
            while (true)
            {
                TimeDispalyBinding = DateTime.Now.ToString("HH:mm:ss:fff");
                await Task.Delay(1);
            }
        }

调用这个方法时,我们采用了Task.Run()的方式。这种方式的优势在于,我们无需等待异步操作完成,只需调用一次即可将其完全交给后台处理,无需再额外关注。

那么,为什么不直接调用这个异步方法呢?原因在于,直接调用时,Visual Studio会提示绿色波浪线警告。为了避免这种提示,同时让代码更加清晰,我们选择显式声明。对于阅读代码的人来说,这样可以一目了然地看出这是一个异步操作,而不是普通的同步函数。这种明确的声明方式,不仅提升了代码的可读性,也符合良好的编程习惯。

cs 复制代码
            //调用时间显示的函数
            Task.Run(()=>DisplayTime());

第二种方法

cs 复制代码
                DateTime now = DateTime.Now;
                string displayTimer = now.ToString(@"hh\:mm\:ss\:fff");
                TextBlock.Text = displayTimer;

这种写法较为繁琐,代码风格也稍显随意。它通过一个同步函数封装了时间显示的逻辑:

cs 复制代码
        private void Timer_Tick(object sender, EventArgs e)
        {
            if (DisplayOrStart)
            {
                DateTime now = DateTime.Now;
                string displayTimer = now.ToString(@"hh\:mm\:ss\:fff");
                TextBlock.Text = displayTimer;
            }
            else
            {
                TimeSpan duration = DateTime.Now - startTime;
                // 更新TextBlock的时间显示
                string formattedDuration = duration.ToString(@"hh\:mm\:ss\:fff");
                TextBlock.Text = formattedDuration;
            }

调用时,使用了一个DispatcherTimer,通过周期性触发的方式更新时间显示:

cs 复制代码
            DispatcherTimer timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromMilliseconds(20); // 每秒更新一次
            timer.Tick += Timer_Tick;
            timer.Start();

这种实现方式虽然可行,但存在一些明显的缺点。首先,定时器的使用需要非常谨慎,稍有不慎就可能导致资源泄漏或性能问题。其次,定时器的参数设置较为复杂,涉及多个函数调用,代码显得冗长且不够简洁。相比之下,它远不如第一种方法优雅高效。

相关推荐
從南走到北13 分钟前
JAVA同城服务场馆预约门店预约健身房瑜伽馆预约系统支持H5小程序APP源码
java·开发语言·小程序
爱学的小码21 分钟前
JavaEE初阶——多线程3(案例)
java·开发语言·单例模式·java-ee
csbysj202031 分钟前
Ruby 面向对象编程深入解析
开发语言
voidmort32 分钟前
web3.py 简介:面向 Python 开发者的以太坊
开发语言·python·web3.py
Teacher.chenchong1 小时前
R语言实现物种分布预测与生态位分析:多元算法实现物种气候生态位动态分析与分布预测,涵盖数据清洗、模型评价到论文写作全流程
开发语言·算法·r语言
烤麻辣烫1 小时前
23种设计模式(新手)-7迪米特原则 合成复用原则
java·开发语言·学习·设计模式·intellij-idea
菠菠萝宝2 小时前
【Java手搓RAGFlow】-1- 环境准备
java·开发语言·人工智能·llm·openai·rag
攻城狮CSU2 小时前
C# 异步方法
开发语言·前端·c#
lsx2024062 小时前
ionic 模态窗口:深入解析与最佳实践
开发语言
q***13612 小时前
史上最厉害的Java进阶之路
java·开发语言