最近发现日常的工作中,经常因为敲代码而忘记了休息,晚上眼睛特别的累。

并且经常长时间看着显示器,对眼睛一定是不好的,所以今天开发了一个小程序,用于提醒休息。

下面先看看运行效果:

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线程的使用 制作提醒休息小程序(长时间计算机工作者必备)的更多相关文章

  1. 算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!

    算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!

  2. 教你制作挂件头像 | 小程序七十二变之 canvas 绘制国旗头像

    昨天朋友圈被「请给我一面国旗@微信官方」刷屏,虽然知道是假的,但是从另一个角度来看,弄清楚如何实现更有趣. 1.canvas 这就不得不提到小程序中的 API canvas,H5 中也是有 canva ...

  3. WPF控件--利用Winform库中的NotifyIcon实现托盘小程序

    WPF控件--NotifyIcon   运行界面如下所示:            图1                                             图2 代码很少,如下所示 ...

  4. 利用Python制作简单的小程序:IP查看器

    前言 说实话,查看电脑的IP,也挺无聊的,但是够简单,所以就从这里开始吧.IP地址在操作系统里就可以直接查看.但是除了IP地址,我们也想通过IP获取地理地址和网络运营商情况.IP地址和地理地址并没有固 ...

  5. 制作一个控制台小程序,要求:用户可以在控制到录入学生的姓名,当用户输入quit(不区分大小写)时,程序停止接收用户输入,并且显示出学生个数及姓名

    string name = string.Empty; //定义一个集合来接收学生 List<string> my = new List<string>(); do { Con ...

  6. JavaScript中的setTimeout、setInterval和随机函数制作简易抽奖小程序

    几乎所有计算机语言有都内置随机函数.当然这种随机,人们习惯称为伪随机数发生器,产生的是一个[0,1)之间的一个小数.再通过简单算术运算生成一个符合需求的整数.JS中通用公式通常为parseInt(Ma ...

  7. 微信小程序如何开发制作

    微信小程序如何开发制作 微容SMO是一款微信小程序的免费在线制作工具,用户在微容平台上无需编辑代码,可通过拖拽式操作即可完成小程序的制作,真正意义上实现了小程序零代码免费制作! 消除技术门槛:无需代码 ...

  8. 理解微信小程序的双线程模型

    有过微信小程序开发经验的朋友应该都知道"双线程模型"这个概念,本文简单梳理一下双线程模型的一些科普知识,学识浅薄,若有错误欢迎指正. 我以前就职于「小程序·云开发」团队,在对外的一 ...

  9. [Deepin 15] 安装 Java 8、Git、Firefox、SafeEyes(定时提醒休息工具)

    一.安装 JDK 8 1.到官网,用 迅雷下载 安装包 (jdk-8u131-linux-x64.tar.gz) 2.解压放到目录 /opt/software/jdk 3.配置环境变量 sudo vi ...

随机推荐

  1. linux系统配置文件和用户配置文件及其作用

    我的博客:www.while0.com /etc/issue 未登陆时控制台显示的文字 /etc/issue.net 远程登陆时控制台显示的文字 /etc/motd 用户登陆时显示的文字 这里先提供两 ...

  2. Linux下对拍脚本与随机数生成器

    对拍脚本 新建一个文档 check.sh 作为对拍脚本. #!/bin/bash while(true)do #死循环 ./data > .in #运行数据生成器,将数据输出到1.in ./st ...

  3. 20个可以帮你简化iOS app开发流程的工具

    这里推荐20个可以帮你简化iOS app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是 ...

  4. 基于SharePoint 的企业信息平台架构

  5. Linux上使用Qt Creator进行C/C++开发

    目录[-] 1.安装Qt Creator和基础构建环境(以Ubuntu为例): 2.把自动完成快捷键"Ctrl+空格"改为"Alt+/"或者"Shif ...

  6. Cocos2d-x学习之windows 7的visual studo 2010开发环境安装

    1.引擎代码的下载 官方版本地址为: http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download 目前最新版本是cocos2d-2.0-rc0a ...

  7. android学习——eclipse的svn的搭建

    一.svn 的在线安装 下面为在线安装SVN插件. 以下是一些关键步骤: 其中http://subclipse.tigris.org/update_1.8.x是SVN插件的下载站点[subclipse ...

  8. Square

    Square TimeLimit: 1 Second   MemoryLimit: 32 Megabyte Totalsubmit: 1638   Accepted: 440 Description ...

  9. php--常用的时间处理函数

    天地四方曰宇,往古来今曰宙 时间是世界的重要组成部分,不论花开花落,还是云卷云舒都有它的影子. 但它源起何处?又将去向何方?没人知道答案,也不需要答案,我们需要的只是一个相对的起点来标识时间,现今世界 ...

  10. 使用aespython进行ECB加解密示例

    CBC示例: from aespython import cbc_mode, key_expander, aes_cipher key = 'MluJMEZegVmrnWDaBiG1j7lqpkxNH ...