MyTask4
最近稍微做了点修改,把几处bug修复了下,另外新增了授权码功能和数据缓冲功能
先看看效果图
1.
如果要把软件做的高大上一些,你可以加一个授权验证,授权码以字符串形式存放在程序里面,当然你也可以另外开一个窗体,自己写个加密解密字符串小插件。
Boolean licenseKey(string code)
{
string []key = new string[]{"yefeng",""};
for(int i = 0;i<2;i++)
if(key[i].Equals(code) == true) return true;
return false; } void Button13Click(object sender, EventArgs e)
{
string key = Interaction.InputBox("请输入授权码","医疗数据分析软件","",500,300);
if(key == "")
//MessageBox.Show("点击取消返回","提示");
return;
else
{
if(licenseKey(key) == true)
{
radioButton1.Enabled = true;
radioButton2.Enabled = true;
button6.Enabled = true;
button11.Enabled = true;
button12.Enabled = true;
button13.Text = "已授权";
button13.ForeColor = Color.Red;
//button13.Enabled = false;
button13.Visible = false;
label8.Visible = true; }
else
MessageBox.Show("授权码错误,请联系开发者获取授权码","错误提示");
} }
*注:
之前是有打算把授权码保存到本地文件的,因为加密解密的缘故,在本地的授权码是加密的形式,所以可以防止关闭程序后,内存中的数据清空,等重开程序,又要重新验证一次的缘故。
我好懒,不想写,感觉这样用着也行,凑合着,如果以后闲得慌再去实现
2.
另外一个是数据分析之后,缓冲一下在展示数据,感觉这个功能完全是yy出来的,因为要弄的高大上一点,你懂得。
<span style="white-space:pre"> </span>textBox3.Text = "数据正在后台分析...请稍后..."; //new Thread(sleepDataShow).Start();
Application.DoEvents();
Random rd = new Random(GetRandomSeed());
int flagThread = (int)(rd.NextDouble()*3000+2000);
//System.Diagnostics.Debug.WriteLine("flagThread:"+flagThread);
Thread.Sleep(flagThread); //if(flagSleepDataShow == 1)//在判断确定已经sleep之后在显示数据
//{
//flagSleepDataShow = 0;
DialogResult dr= MessageBox.Show("数据分析完毕","请点击确定", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
*注:
之前是直接让主线程sleep,发现显示出了问题,后来看了下,你阻断主线程,当然会影响到其他进程,后面又想不用主线程吧,自己另外开了一个线程,发现结果还是不行,后面查了下资料,加了一句这个就行了
<span style="white-space:pre"> </span>Application.DoEvents();
总结:高大上的功能都是小细节组成的,这句话真的有道理
MyTask4的更多相关文章
- 第二篇:gradle脚本运行环境分析(gradle的语义模型)
引言:通过上一篇的论述,我们知道gradle脚本是如假包换的groovy代码,但是这个groovy代码是运行在他的上下文环境里面的,学名叫语义模型.这一篇我们就来看看他的语义模型到底是什么,如何使用. ...
- 线上CPU100%?看看这篇是怎么排查的!
前言 作为后端开发工程师,当收到线上服务器CPU负载过高告警时,你会这么做?重启服务,忽略告警?不过在我看来一个合格的工程师是一定要定位到具体问题所在的,从而 fix 它.下面记录一下线上服务器 CP ...
- 线程之sleep(),wait(),yield(),join()等等的方法的区别
操作线程的常用方法大体上有sleep(),join(),yield()(让位),wait(),notify(),notifyAll(),关键字synchronized等等. 由于这些方法功能有些 ...
- ThreadPoolTaskExecutor学习
1. ThreadPoolTaskExecutor学习 1.1. 前言 我们知道一般创建线程池,我们都用ThreadPoolExecutor,但实际上Spring它也对该线程池做了一层封装,他就是Th ...
- spring boot 2X中@Scheduled实现定时任务及多线程配置
使用@Scheduled 可以很容易实现定时任务 spring boot的版本 2.1.6.RELEASE package com.abc.demo.common; import org.slf4j. ...
- 你不知道的Scheduled定时任务骚操作
目录 一.什么是定时任务 二.项目依赖 三.注解式定时任务 3.1 cron 3.2 fixedDelay 3.3 fixedDelayString 3.4 fixedRate 3.5 fixedRa ...
随机推荐
- [LeetCode] Burst Balloons (Medium)
Burst Balloons (Medium) 这题没有做出来. 自己的思路停留在暴力的解法, 时间复杂度很高: 初始化maxCount = 0. 对于当前长度为k的数组nums, 从0到k - 1逐 ...
- Tomcat J2ee 发布步骤
1.找到要发布的工程,并发布到本地tomcat下,测试完全没有问题,找到tomcat下webapps下 并找到该工程,进入该工程目录,全选添加到 drivingSchool.zip 或 drivi ...
- JMS的作用
JMS就是生产者与消费者模式.消费者负责消费生产者产生的消息.通过JMS可以做后台的异步操作,应用到具体工作中的话,有用它来发内部消息的.发邮件的.发短信的,做大操作时在后台做异步操作的. Java ...
- 转:二十七、Java图形化界面设计——容器(JFrame)
转:http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的, ...
- bzoj1558
好题,初看以为只要差分然后维护相同的段数目但是请注意下面的情况2 3 5 8 9 1 2 3 4 这显然答案是3而不是4因此我们还要再维护ld,rd表示左右单独的段长度和s表示不包括左右单独的段,中间 ...
- Makefile第三讲:终端传值给Makefile、Makefile传值给C++代码
摘要 终端传值给Makefile,咋传?只需在终端输入以下命令,那么就可以在Makefile文件中放心大担的使用$(abcde)这个变量了,它的值为BBB Makefile fun.h #includ ...
- SQLServer使用规范(转载)
SQLServer使用规范 常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数据类型 4.自 ...
- ARM学习笔记2——分支跳转指令
一.Arm指令条件码和条件助记符 二.跳转指令B 1.作用 跳转指令B使程序跳转到指定的地址执行程序(跳转范围是PC-32MB到PC+32MB) 2.指令格式(注:B后面如果有条件,条件就是紧跟在B后 ...
- chgrp、chown、chmod命令
讲解内容: 权限代号的含义如下: r:读写目录或文件的权限 read w :写入目录或文件的权限 write x :执行目录或文件的权限 -:删除目录或文件的权限 s:特殊权限,更改目录或文件 ...
- Eclipse修改字体大小
1.MyEclipse|Window|General|Appearance|Colors and Fonts->点击Text Font->Edit