C# WPF上位机开发(倒计时软件)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
生活当中,我们经常会遇到倒计时的场景,比如体育运动的时候、考试的时候等等。正好最近我们学习了c# wpf开发,完全可以用它来做一个简单的倒计时软件。倒计时的原理其实不复杂,就是设定一个起始时间,每到达一个周期之后,就开始递减,直到递减为0,倒计时结束。
实现上面呢,我们可以分成两部分来完成。一部分是界面的设计,另外一部分就是代码的编写。关于界面的部分,比较简单一点的做法就是AA:BB五个字符的形式。毕竟目前来说,我们学到的布局方法还不是很多,AA:BB的方法虽然简约了一点,但是也可以帮助我们来解决问题。
代码部分,最终要的就是定时器的创建和执行。首先,我们需要创建一个定时器,这个定时器肯定有一些属性需要配置。接着,配置完定时器之后,它肯定还有一个周期回调函数,在这个回调函数当中,我们添加上必要的代码,周期性修改AA:BB的内容,这样就可以完成倒计时的工作。最后,等AA:BB恢复为0的时候,还需要关闭定时器。当然做的复杂一点的话,还可以通过反复设置定时器的方法来使得软件功能更加地完善。
1、构建界面
c# wpf最大的一个好处就是可以一边写脚本,一边查看界面的效果。本身界面的开发工作也是可以和业务代码分开来的。所以,按照刚才设计的AA:BB的形式,首先设计和调整好界面。不出意外,界面部分的代码应该是这样的,
<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp"mc:Ignorable="d"Title="Timer" Height="450" Width="800"><Grid><Label x:Name="num1" FontSize="80" Content="0" HorizontalAlignment="Left" Margin="257,135,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.38,0.541"/><Label x:Name="num2" FontSize="80" Content="0" HorizontalAlignment="Left" Margin="302,135,0,0" VerticalAlignment="Top" RenderTransformOrigin="-0.395,0.609"/><Label x:Name="num3" FontSize="80" Content=":" HorizontalAlignment="Left" Margin="364,135,0,0" VerticalAlignment="Top" RenderTransformOrigin="-0.395,0.609"/><Label x:Name="num4" FontSize="80" Content="0" HorizontalAlignment="Left" Margin="397,135,0,0" VerticalAlignment="Top"/><Label x:Name="num5" FontSize="80" Content="0" HorizontalAlignment="Left" Margin="442,135,0,0" VerticalAlignment="Top"/></Grid>
</Window>
2、界面的微调
有了基本的布局之后,一般我们还会根据看到的界面效果,做一些微调,直到它符合我们的要求为止。因为所有的微调操作都是可以实时看到反馈结果的,所以如果项目本身比较简单的话,这个微调的时间并不需要花费太久。

3、编写代码
前面我们讨论过,代码部分修改.xaml.cs即可,主要的内容就是添加定时器,实现定时器回调函数,更新label内容。为了方便大家理解,这里给出完整的代码,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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;namespace WpfApp
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{private int num = 2400;private System.Windows.Threading.DispatcherTimer dispatcherTimer = null;public MainWindow(){InitializeComponent();// initializationdisplay_number();dispatcherTimer = new System.Windows.Threading.DispatcherTimer();dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);dispatcherTimer.Interval = new TimeSpan(0, 0, 1);dispatcherTimer.Start();}private void dispatcherTimer_Tick(object sender, EventArgs e)//计时执行的程序{num -= 1;if(num == 0){dispatcherTimer.Stop();return;}display_number();}private void display_number(){// display numnum1.Content = Convert.ToString((num / 60) / 10);num2.Content = Convert.ToString((num / 60) % 10);num4.Content = Convert.ToString((num % 60) / 10);num5.Content = Convert.ToString((num % 60) % 10);}}
}
代码当中主要有三个函数。函数MainWindow是构造函数,除了系统自带的内容之外,我们还创建了一个定时器,它的名字叫dispatchTimer。这个定时器的回调函数是dispatchTimer_Tick,执行周期是每1s被调用一次,并且在创建完毕之后,立即执行。
第二个函数是dispatchTimer_Tick,这就是刚刚说的定时器回调函数,每1s执行一次。每一次执行的时候,我们都需要num递减1。这个num就是总的计数时间,以秒为单位。假设我们设置的num是1200,那就代表1200s,时间长度为20min。如果时间为0之后,那么可以停止定时器的执行了。
第三个函数是display_number,这个函数在前面两个函数当中都被调用了。它的功能比较纯粹,主要就是显示AA:BB的内容,其中AA代表分钟,BB代表秒钟,怎么把num转化成AA:BB,主要就是采取一些除法和取余的手段来实现的,大家可以参考对应的代码思考一下就能明白里面的远原理了。
4、调试和测试
调试和测试就比较简单了。测试主要有两点,第一,验证软件启动之后,是否真的发生了数据递减的动作。第二,时间递减为0之后,是不是定时器就停止了操作。如果这两点都已经ok了,那说明我们编写的软件就是成功的。不然就需要回去检查一下原因,看看问题发生在了什么地方。

注:
如果需要把小时也算在里面,有兴趣的同学可以试试这个逻辑,
// display numnum1.Content = Convert.ToString((num / 3600) / 10);num2.Content = Convert.ToString((num / 3600) % 10);num4.Content = Convert.ToString((num % 3600 / 60) / 10);num5.Content = Convert.ToString((num % 3600 / 60) % 10);num7.Content = Convert.ToString((num % 60) / 10);num8.Content = Convert.ToString((num % 60) % 10);
相关文章:
C# WPF上位机开发(倒计时软件)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 生活当中,我们经常会遇到倒计时的场景,比如体育运动的时候、考试的时候等等。正好最近我们学习了c# wpf开发,完…...
Mysql timestamp和datetime区别
文章目录 一、存储范围和精度二、默认值和自动更新三、时区处理四、索引和性能五、存储空间和数据复制六、使用场景和注意事项七、时区转换 MySQL是一个常用的关系型数据库管理系统,其内置了多种数据类型用于存储和操作数据。其中,timestamp和datetime是…...
新手村之SQL——分组与子查询
1.GROUP BY GROUP BY 函数就是 SQL 中用来实现分组的函数,其用于结合聚合函数,能根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。 mysql> SELECT country, COUNT(country) AS teacher_count-> FROM teacher…...
【hacker送书第9期】算法训练营(入门篇)
第9期图书推荐 内容简介作者简介精彩书评图书目录概述参与方式 内容简介 本书以海量图解的形式,详细讲解常用的数据结构与算法,又融入大量的竞赛实例和解题技巧。通过对本书的学习,读者可掌握12种初级数据结构、15种常用STL函数、10种二叉树和…...
微服务链路追踪组件SkyWalking实战
概述 微服务调用存在的问题 串联调用链路,快速定位问题;理清服务之间的依赖关系;微服务接口性能分析;业务流程调用处理顺序; 全链路追踪:对请求源头到底层服务的调用链路中间的所有环节进行监控。 链路…...
ubuntu 更换国内镜像
备份 cd /etc/aptcp sources.list sources.list.bakup修改源为清华源 sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g sources.list更新软件源 apt-get update其他源如下: mirrors.ustc.edu.cn 中科大 mirrors.163.com 163 mirrors.aliyun.com 阿里云...
树模型与深度模型对比
表格型数据为什么那么神奇,能让树模型在各种真实场景的表格数据中都战胜深度学习呢?作者认为有以下三种可能: 神经网络倾向于得到过于平滑的解冗余无信息的特征更容易影响神经网络 所以一定程度的特征交叉是不是必要的,因为one-ho…...
测试类运行失败:TestEngine with ID ‘junit-jupiter‘ failed to discover tests
背景:原本我的项目是可以运行的,然后我用另外一台电脑拉了下来,也是可以用的,但是很奇怪,用着用着就不能用了。报了以下错误: /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home/bin/java …...
nodejs使用node-cron实现定时任务功能
ChatGPT国内站点:海鲸AI 在Node.js中,node-cron是一个轻量级的任务调度库,它允许你根据类似于Cron的时间表来安排任务的执行。如果你想要每十分钟执行一次任务,你可以按照以下步骤来设置: 安装node-cron: 如…...
【1day】蓝凌OA 系统datajson.js接口远程命令执行漏洞学习
注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞概述 二、影响版本 三、资产测绘 四、漏洞复现...
ABCDE类网络的划分及保留网段
根据IP地址的分类,IP地址被分为A、B、C、D和E五类。下面是对ABCDE类网络的划分及保留网段的详细描述: A类网络:范围从1.0.0.0到127.0.0.0,网络地址的最高位必须是“0”,可用的A类网络有127个,每个网络能容…...
营销系统规则引擎
一、系统介绍 规则引擎是一个用于执行营销规则的模块,其包括营销规则配置、规则校验等功能。规则引擎可以根据预先设定的条件和逻辑,自动化地执行特点的营销策略,帮助企业更好地吸引客户,增加销售和提高客户满意度。 规则引擎功能…...
【Linux】命令行参数
文章目录 前言一、C语言main函数的参数二、环境变量总结 前言 我们在Linux命令行输入命令的时候,一般都会跟上一些参数选项,比如l命令,ls -a -l。以前我总是觉得这是理所当然的,没深究其本质究竟是什么,今天才终于知道…...
【信息安全】-个人敏感信息、个人信息、个人金融信息
文章目录 个人敏感信息个人敏感信息判定举例 个人信息个人信息判定举例 个人金融信息内容a) 账户信息指账户及账户相关信息b) 鉴别信息c) 金融交易信息d) 个人身份信息e) 财产信息f) 借贷信息g) 其他信息: 出处 个人敏感信息 个人敏感信息判定 个人敏感信息是指一旦泄露、非法…...
海外服务器和国内服务器有什么样的区别呢
海外服务器和国内服务器有什么样的区别呢,其实呢在外形方面是大同小异,除了外形还有一些其他方面还存在这一些差异。 一,地理位置的差异。 海外服务器——有可能在中国数据中心之外的任何国家地区,例如美国服务器,韩…...
电脑屏幕亮度怎么调?学会4个方法,轻松调节亮度!
“我总是感觉我电脑屏幕太暗了,有时候如果光线好一点,会看不清电脑屏幕。有什么可以把电脑调亮一点的简单方法吗?” 在我们的日常生活中,电脑已经成为我们工作、学习、娱乐不可或缺的工具。然而,长时间面对电脑屏幕可能…...
微信小程序之猜数字和猜拳小游戏
目录 效果图 app.json 一、首页(index3)的代码 wxml代码 wxss代码 二、猜数字页面(index)代码 wxml代码 wxss代码 js代码 三.游戏规则页面(logs)代码 wxml代码 wxss代码 四.猜拳页面ÿ…...
CETN01 - How to Use Cloud Classroom
文章目录 I. Introduction to Cloud ClassroomII. How to Use Cloud Classroom1. Publish Resources2. Conduct Activities3. Class Teaching Reports4. View Experience Values5. Performance in Cloud Classroom I. 云课堂介绍II. 如何使用云课堂1. 发布资源2. 进行活动3. 班…...
安卓8预装可卸载应用
环境 系统:Android 8 CPU:MTK 理论上改法适用于其他平台,比如展讯。 不适用于安卓11。安卓11请参照android 11预装APP到data/app目录 实现 假设要内置test这个应用。 第一步把test添加到系统编译配置中,不同平台或cpu文件不一样。 比如&am…...
微服务实战系列之MemCache
前言 书接前文,马不停蹄,博主继续书写Cache的传奇和精彩。 Redis主要用于数据的分布式缓存,通过设置缓存集群,实现数据的快速响应,同时也解决了缓存一致性的困扰。 EhCache主要用于数据的本地缓存,因无法保…...
Hugging Face Hub下载模型文件:hf_hub_download vs snapshot_download保姆级对比指南
Hugging Face Hub模型下载实战指南:hf_hub_download与snapshot_download深度解析 当你第一次在Python项目中集成Hugging Face模型时,是否曾被这两个看似相似的下载函数困扰过?作为Hugging Face生态中最常用的两个下载工具,hf_hub_…...
3步永久保存喜马拉雅VIP音频:xmly-downloader-qt5全功能测评
3步永久保存喜马拉雅VIP音频:xmly-downloader-qt5全功能测评 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 xmly-down…...
GLM-OCR在ComfyUI工作流中的应用:构建可视化OCR处理节点
GLM-OCR在ComfyUI工作流中的应用:构建可视化OCR处理节点 如果你经常用ComfyUI做图片生成或者编辑,可能会遇到一个挺麻烦的事儿:怎么把图片里的文字快速提取出来,然后用到下一步工作流里?比如,你想把一张海…...
YOLOv5实战:如何自定义COCO指标计算APtiny(附完整代码修改指南)
YOLOv5实战:深度解析COCO评估指标自定义与APtiny计算优化 在目标检测领域,COCO数据集的评估标准已成为衡量模型性能的黄金准则。但当我们面对特定场景——尤其是小目标检测任务时,标准的3232像素"small"类别划分往往难以满足精细化…...
XC泰山服务器麒麟V10系统安装全流程解析
1. 准备工作:了解XC泰山服务器与麒麟V10系统 在开始安装之前,我们需要先了解一下XC泰山服务器和麒麟V10操作系统的基本情况。XC泰山服务器是国内自主研发的高性能服务器,采用ARM架构处理器,具有高性能、低功耗的特点。而麒麟V10则…...
中国空间智能,梦想照进现实
2026年初,AI教母李飞飞的AI公司World Labs再次获得一笔10亿美元的投资,投资名单除了传统投资机构外,还不乏英伟达、Autodesk等行业巨头,这清晰地传递出市场信号:继AI大语言模型之后,空间智能已成为AI的下一…...
browser-use爆火:AI Agent接管浏览器,测试自动化正在被重构
导读 最近在实际项目和工具演进中,可以明显看到一个变化: AI 不再只是写代码,而是开始“直接干活”。 这款 browser-use开源工具非常厉害。它能让AI Agent🚀直接操控浏览器。实现网页任务自动化简单高效 (๑•̀ㅂ•́)و✧。该…...
3大核心模块:Steam成就管理开源工具从问题解决到效率提升的实战指南
3大核心模块:Steam成就管理开源工具从问题解决到效率提升的实战指南 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 引言 在游戏玩家的日常体…...
SDMatte效果对比图谱:SDMatte/RemBG/BackgroundMattingV2在玻璃场景PK
SDMatte效果对比图谱:SDMatte/RemBG/BackgroundMattingV2在玻璃场景PK 1. 引言:玻璃抠图的特殊挑战 玻璃材质因其透明和反光特性,一直是图像抠图领域最具挑战性的对象之一。传统抠图工具在处理玻璃制品时,往往会出现边缘断裂、透…...
Qt安卓开发实战:从红米K60调试到多机型适配指南
1. Qt安卓开发环境准备 搞Qt安卓开发,首先得把环境搭好。这里假设你已经按照官方文档或者教程配置好了Qt Creator和Android SDK/NDK。如果还没搞定,建议先去Qt官网把Android开发套件下载齐全,包括: Qt for Android(建议…...
