最近稍微做了点修改,把几处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的更多相关文章

  1. 第二篇:gradle脚本运行环境分析(gradle的语义模型)

    引言:通过上一篇的论述,我们知道gradle脚本是如假包换的groovy代码,但是这个groovy代码是运行在他的上下文环境里面的,学名叫语义模型.这一篇我们就来看看他的语义模型到底是什么,如何使用. ...

  2. 线上CPU100%?看看这篇是怎么排查的!

    前言 作为后端开发工程师,当收到线上服务器CPU负载过高告警时,你会这么做?重启服务,忽略告警?不过在我看来一个合格的工程师是一定要定位到具体问题所在的,从而 fix 它.下面记录一下线上服务器 CP ...

  3. 线程之sleep(),wait(),yield(),join()等等的方法的区别

    操作线程的常用方法大体上有sleep(),join(),yield()(让位),wait(),notify(),notifyAll(),关键字synchronized等等.    由于这些方法功能有些 ...

  4. ThreadPoolTaskExecutor学习

    1. ThreadPoolTaskExecutor学习 1.1. 前言 我们知道一般创建线程池,我们都用ThreadPoolExecutor,但实际上Spring它也对该线程池做了一层封装,他就是Th ...

  5. spring boot 2X中@Scheduled实现定时任务及多线程配置

    使用@Scheduled 可以很容易实现定时任务 spring boot的版本 2.1.6.RELEASE package com.abc.demo.common; import org.slf4j. ...

  6. 你不知道的Scheduled定时任务骚操作

    目录 一.什么是定时任务 二.项目依赖 三.注解式定时任务 3.1 cron 3.2 fixedDelay 3.3 fixedDelayString 3.4 fixedRate 3.5 fixedRa ...

随机推荐

  1. perl unload utf-8 oracle 数据库

    perl unload utf-8 Oracle [oracle@oadb sbin]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Produc ...

  2. Visual Studio统计有效代码行数

    在网上看到别人用的方法: 按CTRL+SHIFT+F (Find in files),勾上支持正则表达式,然后输入搜索内容: ^:b*[^:b#/]+.*$ 以上表达式的统计可做到:#开头和/开头或者 ...

  3. BZOJ3522: [Poi2014]Hotel

    3522: [Poi2014]Hotel Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 195  Solved: 85[Submit][Status] ...

  4. Node.js权威指南 (14) - 使用Express构建Web应用程序

    14.1 Express概述 / 415 14.1.1 安装Express / 415 14.1.2 使用Express开发一个简单的示例应用程序 / 415 Backup for docker: e ...

  5. ArcGIS_系列视频教程::精品大放送

    转自:http://www.cnblogs.com/gispeng/archive/2008/11/28/1342758.html     ArcGIS_系列视频教程::精品大放送 文件名: ArcG ...

  6. WinDbg配置和使用基础

    WinDbg配置和使用基础 WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. 1. WinDbg介 ...

  7. Linux学习笔记32——select()函数分析【转】

    Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect.accept.recv或recvfrom这样的阻塞程序 ...

  8. jQuery技术内幕电子版4

    参数selector是复杂HTML代码 则利用浏览器的innerHTML机制创建DOM元素 第157行:如果HTML代码满足缓存条件,则在使用转换后的DOM元素时,必须先复制一份再使用,否则可以直接使 ...

  9. HW4.18

    public class Solution { public static void main(String[] args) { System.out.println("Graph 1&qu ...

  10. Kth Ancestor 第k个祖先问题

    题目出处 这道题目出自hackerrank的8月月赛的第三题. 题目大意: 先给出一棵树 之后有三种操作分别为:加边,查询,和删除一个节点 查询的时候要给出任意节点x的第k个祖先 每组数据有t个cas ...