开始画面

抽奖中:

抽奖结果:

需要一个随机数Random的帮助类,让随机数唯一性

  public  class RandomHelper
{ public int GetNum(int min, int max)
{
Thread.Sleep();//随机休息1秒
return GetIntNum(min,max);
} /// <summary>
/// 获取随机数,解决重复问题
/// </summary>
/// <param name="min">返回的随机数字包含下限</param>
/// <param name="max">返回的随机数字不包含上限</param>
/// <returns></returns>
private int GetIntNum(int min,int max)
{ Guid Guidnum = Guid.NewGuid();
string guid = Guidnum.ToString();
int seed = DateTime.Now.Millisecond;
for (int i = ; i < guid.Length; i++)
{
switch (guid[i])
{
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
seed = seed + ;
break;
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
seed = seed + ;
break;
case 'o':
case 'p':
case 'q':
case 'r':
case 's':
case 't':
seed = seed + seed;
break;
case 'u':
case 'v':
case 'w':
case 'x':
case 'y':
case 'z':
seed = seed + ;
break;
default:
seed = seed + ;
break;
}
} return new Random(seed).Next(min,max); }

Form的 代码编写

先要放2个

  public Form1()
{
InitializeComponent();
IsBegin = true;
this.btnEnd.Enabled = false;
}
/// <summary>
/// 标识是否开始摇奖
/// </summary>
private static bool IsBegin = true; private string[] RedNum = {
"","","","","","","","","","","","","",
"","","","","","","","","","","","","",
"","","","","","",""
};
private string[] BuleNum = {
"","","","","","","","","","","","","",
"","",""
}; private void btnStart_Click(object sender, EventArgs e)
{
TaskFactory taskFactory = new TaskFactory();
List<Task> taskList = new List<Task>();
IsBegin = true;
this.btnStart.Enabled = false; // Thread.Sleep(1000);
this.btnEnd.Enabled = true;
foreach (Control item in gBox.Controls)
{
if (item is Label)
{
Label lbl = (Label)item;
taskList.Add(taskFactory.StartNew(
() => {
while (IsBegin)
{
this.UpdateNum(lbl);
} }));
}
}
taskFactory.ContinueWhenAll(taskList.ToArray(),tList=>this.ShowNumber());//等所有线程操作完毕后才显示中奖号。 }
/// <summary>
/// 锁
/// </summary>
private static readonly object Num_Lock = new object(); private void UpdateNum(Label lbl)
{
RandomHelper randomHelper = new RandomHelper(); if (lbl.Name.Contains("Blue"))
{
int num = randomHelper.GetNum(,);
string blueText = BuleNum[num];
this.UpdateLbl(lbl, blueText);
}
else
{
int num = randomHelper.GetNum(, );
string redText = RedNum[num];
lock (Num_Lock)
{
List<string> list = this.GetLabelList();
if (list.Contains(redText))
{
return;
}
else
{
this.UpdateLbl(lbl,redText);
}
}
}
}
/// <summary>
/// 获取当前已经抽出的双色球,防止重复
/// </summary>
/// <returns>所有控件的值</returns>
private List<string> GetLabelList()
{
List<string> strList = new List<string>();
foreach (Control item in gBox.Controls)
{
if (item is Label)
{
Label label = (Label)item;
strList.Add(label.Text);
}
}
return strList;
}
/// <summary>
/// 通过主线程修改UI
/// </summary>
/// <param name="lbl">修改的Label</param>
/// <param name="text">修改的值</param>
private void UpdateLbl(Label lbl, string text)
{
if (lbl.InvokeRequired)
{
this.Invoke(new Action(() =>
{
lbl.Text = text;
//Thread.Sleep(2000);
//Console.WriteLine($"当前UpdateLbl线程id{Thread.CurrentThread.ManagedThreadId}");
}));//交给UI线程去更新
}
else
{
lbl.Text = text;
}
}
/// <summary>
/// 结束抽奖,开奖
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnEnd_Click(object sender, EventArgs e)
{ if (!this.GetLabelList().Contains(""))
{
IsBegin = false;
this.btnEnd.Enabled = false;
this.btnStart.Enabled = true; }
else
{
MessageBox.Show("请慢一点,稍后再试");
} } private void ShowNumber()
{
MessageBox.Show(string.Format("本期双色球结果是 {0} {1} {2} {3} {4} {5} {6}",
lbRed1.Text, lbRed2.Text, lbRed3.Text, lbRed4.Text, lbRed5.Text, lbRed6.Text, lbBlue.Text));
}
}

c#用winform开发一个简易双色球项目的更多相关文章

  1. 使用Phalcon框架开发一个简易的博客系统

    使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...

  2. android开发学习---开发一个简易的短信发送器

    一.需求: 开发一个简易的短信发送器,输入:对方手机号码,短信内容,点击发送按钮,短信发送成功,对方手机成功收到短信. 其中要求短信内容过长时可以自动拆分,长度英文是160个英文,中文是70个,中英混 ...

  3. jQuery 开发一个简易插件

    jQuery 开发一个简易插件 //主要内容 $.changeCss = function(options){ var defaults = { color:'blue', ele:'text', f ...

  4. 使用Vue2+webpack+Es6快速开发一个移动端项目,封装属于自己的jsonpAPI和手势响应式组件

    导语 最近看到不少使用vue制作的音乐播放器,挺好玩的,本来工作中也经常使用Vue,一起交流学习,好的话点个star哦 本项目特点如下 : 1. 原生js封装自己的跨域请求函数,支持promise调用 ...

  5. 如何用django开发一个简易个人Blog

    功能概要:(目前已实现功能) 公共展示部分: 1.网站首页展示已发布的博客记录,包括名称.摘要信息.发布日期.阅读量及评论数. 2.首页文章列表可按照分类筛选. 3.点击标题或阅读全文链接,进入博客阅 ...

  6. 从零开始开发一个简易的类vue-cli构建工具

    代码地址:https://github.com/cheer4chai/webpack-learning 仿照vue-cli开发这个工具的目的是了解webpack的基本设置,以及vue-cli的工作原理 ...

  7. 利用MVC编程模式-开发一个简易记事本app

    学了极客学院一个开发记事本的课程,利用自己对MVC编程模式的简单理解重写了一遍该app. github地址:https://github.com/morningsky/MyNote MVC即,模型(m ...

  8. 如何用Eggjs从零开始开发一个项目(2)

    在上一篇文章,我们已经使用Sequelize连接上了数据库,并能进行简单的数据库操作,在此基础上,我们试着来开发一个完整的项目.这篇文章我们从用户的注册.登录着手,试着开发用户模块的相关的代码. 用户 ...

  9. 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

随机推荐

  1. Java开源生鲜电商平台-团购模块设计与架构(源码可下载)

    Java开源生鲜电商平台-团购模块设计与架构(源码可下载) 说明:任何一个电商系统中,对于促销这块是必不可少的,毕竟这块是最吸引用户的,用户也是最爱的模块之一,理由很简单,便宜. 我的经验是无论是大的 ...

  2. js 的 骚操作

    单行的js 代码虽然简洁,但却不易维护,甚至难以理解, 但这却并不影响前端童鞋们编写简洁代码的热情, 一   , 生成随机ID // 生成长度为10的随机字母数字字符串 Math.random().t ...

  3. 简述RPC原理实现

      前言 架构的改变,往往是因为业务规模的扩张. 随着业务规模的扩张,为了满足业务对技术的要求,技术架构需要从单体应用架构升级到分布式服务架构,来降低公司的技术成本,更好的适应业务的发展. 分布式服务 ...

  4. Python练习:九九乘法表

    打印 n * n 的乘法表 #打印 9*9 乘法表 def Multiplication(n): # n - 定义打印的行数 max_len = len(str((n)**2)) #计算最大值的占位( ...

  5. Zabbix-server 3.4 安装详细和修改web界面中文出现的乱码(一)

    1. 老套路先来个Zabbix简介: Zabbix是一个企业级的.开源的.分布式的监控套件: Zabbix可以监控网络和服务的监控状况. Zabbix利用灵活的告警机制,允许用户对事件发送Email. ...

  6. java代码之美(11)---java代码的优化

    java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...

  7. Jenkins之Log Parse的使用

    在初学使用Jenkins的同学们,应该都遇到过通过bash或者cmd命令执行输出的日志,没办法做到对error, warning等状态的分析和统计.在这里就给他介绍一款实现此功能的插件Log Pars ...

  8. asp.net core系列 54 IS4用客户端凭据保护API

    一. 概述 本篇开始进入IS4实战学习,从第一个示例开始,该示例是 “使用客户端凭据保护API”,这是使用IdentityServer保护api的最基本场景.该示例涉及到三个项目包括:Identity ...

  9. Windows下Goland的Terminal设置为Git Bash

    Windows下Terminal默认的使用的是系统自带的cmd,功能实在太少,用起来远不如Git Bash来得方利和高效.其实要在Goland的Terminal中使用Bash设置起来也很简单,设置位置 ...

  10. Kubernetes的DaemonSet(下篇)

    用Daemon Pod来进行通信 使用Pod来再DaemonSet中通信的手段有: 推的方式:在DaemonSet中的Pod会被配置成发送更新到如状态数据库这样的服务.这些都没有客户端. IP+端口方 ...