C# winform线程的使用 制作提醒休息小程序(长时间计算机工作者必备)
最近发现日常的工作中,经常因为敲代码而忘记了休息,晚上眼睛特别的累。
并且经常长时间看着显示器,对眼睛一定是不好的,所以今天开发了一个小程序,用于提醒休息。
下面先看看运行效果:
1、程序启动后,后台运行,不显示界面,也没有制作显示托盘图标
2、当时间到达后,屏幕居中显示以下界面,并且开始倒计时
3、倒计时为0时,屏幕熄灭,但其实随便碰一下鼠标或键盘就会点亮显示器了。
4、人手点亮显示器后,显示以下界面,也可以不亮屏的状态下直接输入密码。
5、输入密码并且正确,界面隐藏至后台,并且重新计时。
上代码:
首先,要有一个控制显示器的帮助类,MonitorHelper
- using System;
- using System.Runtime.InteropServices;
- namespace MonitorTool
- {
- /// <summary>
- /// 显示器开关控制
- /// </summary>
- public class MonitorHelper
- {
- [DllImport("user32.dll")]
- public static extern IntPtr SendMessage(
- IntPtr hWnd,
- uint msg,
- uint wParam,
- int lParam);
- //系统消息
- private const uint WM_SYSCOMMAND = 0x112;
- //关闭显示器的系统命令
- private const int SC_MONITORPOWER = 0xF170;
- //2为PowerOff, 1为省电状态,-1为开机
- private const int MonitorPowerOff = ;
- /// <summary>
- /// 关闭显示器
- /// </summary>
- public static void PowerOff(IntPtr hWnd)
- {
- SendMessage(
- hWnd,
- WM_SYSCOMMAND,
- SC_MONITORPOWER,
- );
- }
- /// <summary>
- /// 打开显示器
- /// </summary>
- public static void PowerOn(IntPtr hWnd)
- {
- SendMessage(
- hWnd,
- WM_SYSCOMMAND,
- SC_MONITORPOWER,
- -
- );
- }
- }
- }
程序界面:
只有2个控件,分别是Label控件,ID是"lblTips",TextBox控件,ID是"txtPwd"
窗体的TopMost设置为True,StartPosition设置为CenterScreen
窗体的后台代码:
- using System;
- using System.Threading;
- using System.Windows.Forms;
- namespace MonitorTool
- {
- public partial class FrmMain : Form
- {
- //工作总时间
- public int WorkTime { get; set; }
- //显示器关闭前的倒计时时间
- public int TipsTime { get; set; }
- public string Password { get; set; }
- //线程变量
- public Thread tTotal { get; set; }
- public FrmMain()
- {
- InitializeComponent();
- //初始化变量值,也是方便以后修改
- this.WorkTime = * * ; //ms(分钟*60秒*1000毫秒)
- this.TipsTime = ; //s(倒计时的总秒数)
- this.Password = "cong"; //重新计时的密码
- }
- private void FrmMain_Load(object sender, EventArgs e)
- {
- TimerTotal();
- //隐藏窗口
- this.ShowInTaskbar = false;
- this.Hide();
- }
- //开始计时,至屏幕熄灭的方法
- public void TimerTotal()
- {
- //打开新的线程
- tTotal = new Thread(() =>
- {
- //挂起线程,直到到达工作总时间
- Thread.Sleep(this.WorkTime);
- //声明系统的委托
- Action<string> actionDelegate = null;
- //第一次使用委托,显示窗口
- actionDelegate = (x) =>
- {
- lblTips.Text = "";
- this.Show();
- };
- this.Invoke(actionDelegate, "show");
- //第二次使用委托,for循环,显示倒计时提示信息,每个循环挂起线程1秒
- for (int i = this.TipsTime; i >= ; i--)
- {
- actionDelegate = (x) =>
- {
- lblTips.Text = string.Format("Monitor will turn off after {0} secords ...", x);
- };
- this.lblTips.Invoke(actionDelegate, i.ToString());
- Thread.Sleep();
- }
- //第三次使用委托,显示器熄灭,挂起线程3秒,用于缓冲,并且使密码框获得焦点,以便快速输入密码
- actionDelegate = (x) =>
- {
- MonitorHelper.PowerOff(this.Handle);
- Thread.Sleep();
- lblTips.Text = "please type your password.";
- txtPwd.Focus();
- };
- this.Invoke(actionDelegate, "hide");
- });
- //运行线程前,必须定义为后台运行,并开启线程
- tTotal.IsBackground = true;
- tTotal.Start();
- }
- //密码框,如果密码正确,则再次开启线程,重新计时
- private void txtPwd_TextChanged(object sender, EventArgs e)
- {
- if (txtPwd.Text.Trim().Equals(this.Password))
- {
- txtPwd.Text = "";
- TimerTotal();
- this.Hide();
- }
- }
- }
- }
这样就可以完成了。
其实也可以使用Timer控件来制作,但是因为不大熟练线程的使用,所以特意使用线程。
当然,这只用到了线程中很少一部分的知识,代码比使用Timer的简洁了许多。
最后,把程序添加到系统的启动文件夹内,以后开机就能自动运行了。
当看到倒计时的时候,应该要停下工作,起来活动活动了。
C# winform线程的使用 制作提醒休息小程序(长时间计算机工作者必备)的更多相关文章
- 算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!
算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!
- 教你制作挂件头像 | 小程序七十二变之 canvas 绘制国旗头像
昨天朋友圈被「请给我一面国旗@微信官方」刷屏,虽然知道是假的,但是从另一个角度来看,弄清楚如何实现更有趣. 1.canvas 这就不得不提到小程序中的 API canvas,H5 中也是有 canva ...
- WPF控件--利用Winform库中的NotifyIcon实现托盘小程序
WPF控件--NotifyIcon 运行界面如下所示: 图1 图2 代码很少,如下所示 ...
- 利用Python制作简单的小程序:IP查看器
前言 说实话,查看电脑的IP,也挺无聊的,但是够简单,所以就从这里开始吧.IP地址在操作系统里就可以直接查看.但是除了IP地址,我们也想通过IP获取地理地址和网络运营商情况.IP地址和地理地址并没有固 ...
- 制作一个控制台小程序,要求:用户可以在控制到录入学生的姓名,当用户输入quit(不区分大小写)时,程序停止接收用户输入,并且显示出学生个数及姓名
string name = string.Empty; //定义一个集合来接收学生 List<string> my = new List<string>(); do { Con ...
- JavaScript中的setTimeout、setInterval和随机函数制作简易抽奖小程序
几乎所有计算机语言有都内置随机函数.当然这种随机,人们习惯称为伪随机数发生器,产生的是一个[0,1)之间的一个小数.再通过简单算术运算生成一个符合需求的整数.JS中通用公式通常为parseInt(Ma ...
- 微信小程序如何开发制作
微信小程序如何开发制作 微容SMO是一款微信小程序的免费在线制作工具,用户在微容平台上无需编辑代码,可通过拖拽式操作即可完成小程序的制作,真正意义上实现了小程序零代码免费制作! 消除技术门槛:无需代码 ...
- 理解微信小程序的双线程模型
有过微信小程序开发经验的朋友应该都知道"双线程模型"这个概念,本文简单梳理一下双线程模型的一些科普知识,学识浅薄,若有错误欢迎指正. 我以前就职于「小程序·云开发」团队,在对外的一 ...
- [Deepin 15] 安装 Java 8、Git、Firefox、SafeEyes(定时提醒休息工具)
一.安装 JDK 8 1.到官网,用 迅雷下载 安装包 (jdk-8u131-linux-x64.tar.gz) 2.解压放到目录 /opt/software/jdk 3.配置环境变量 sudo vi ...
随机推荐
- iOS开发UI基础—手写控件,frame,center和bounds属性
iOS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...
- 【Xamarin挖墙脚系列:在VMware11中安装Mac10.11 EI Captain后的vmware tools】
原文:[Xamarin挖墙脚系列:在VMware11中安装Mac10.11 EI Captain后的vmware tools] 如何安装 darwin.iso,百度去吧. 关键是对应版本的darwin ...
- 检查string是否为double
之前写的方法,使用try catch来处理 如果能捕获异常就说明问题 public bool CheckLegal() { double number; bool flag = true; try { ...
- BZOJ2105: 增强型LCP
2105: 增强型LCP Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 366 Solved: 86[Submit][Status] Descrip ...
- 如何扩展大规模Web网站的性能?
Reduce Data广告服务网站如何扩展到每天300K QPS请求?分享经验如下: 1. 为大规模设计,广告服务平台从一开始增长就很惊人,因此,系统开始就为大规模设计,系统为水平和垂直伸缩扩展. 2 ...
- 奇怪的Lisp和难懂的计算机程序的构造和解释
最近用新买的 Kindle 看<黑客与画家>的Lisp部分,发现作者 Paul Graham 很推崇 Lisp 语言,并且认为其它语言都没有Lisp简洁“成熟”,并且举例证明其它语言都在往 ...
- [Boost]图形处理库Boost::Polygon
Background 工作中经师傅指导学习应用到了Boost::Polygon这个库,相对于Boost::Geometry,Polygon出自Intel.抽象于芯片流程,于是更贴近于芯片设计流程应用. ...
- Tsinsen A1504. Book(王迪) 数论,贪心
题目:http://www.tsinsen.com/A1504 A1504. Book(王迪) 时间限制:1.0s 内存限制:256.0MB Special Judge 总提交次数:359 ...
- php连接mysql数据库练手
<?php $servername = "localhost"; $username = "yosha"; $password = "leon0 ...
- What does wildcard address in InetSocketAddress mean?
In the docs for the constructor InetSocketAddress(int port) it says: Creates a socket address where ...