开始画面

抽奖中:

抽奖结果:

需要一个随机数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. Angular2+ 使用 Protractor 与 Modify Header Value (HTTP Headers) 插件 完成 Windows Authorization 验证

    入职新公司第二周,接到了一个E2E测试的任务,两天的时间把所有的测试条件都写完了,结果剩下三天都卡在了Windows Authorization验证这里. 先说一下公司项目Authorize的逻辑 第 ...

  2. java.lang.ClassNotFoundException: com.mysql.jdbc.Drive

    Linux下使用eclipse开发web项目,运行的时候出现 Java.lang.ClassNotFoundException: com.MySQL.jdbc.Driver,解决办法如下: 1.导入M ...

  3. mysql中利用group by过滤删除重复行

    DELETEFROM peopleWHERE peopleId IN (SELECT peopleId FROM people GROUP BY peopleId HAVING count(peopl ...

  4. 迎元旦,庆surging 1.0发布

    一位摄影程序员的独白 每个人都有爱好,都有释放压力的活动,而我也不例外,我除了每天上班,周末就会约一群好友去拍妹子,成家后,就改为拍虫子,一拍就到了30岁,到了30岁就感觉到了中年的压力,这时候停下手 ...

  5. 你真的了解String吗?(修正版)

    修正前:new出来的对象,会在堆中存放真正的值: 大错特错!!!! 修正后:new出来的对象,堆存放的并不是真正的值,而是常量池中字符串常量的地址. 一.抛砖引玉 ​ 不知道大家在做面试题时是否会遇到 ...

  6. .net core 杂记:日记记录

    ASP.NET Core 有内置的log组件,遗憾的是看了微软官方文档,貌似无法直接将日志存于文件或数据库,只能由自己实现或引用第三方日志组件. 以下为Nlog和log4net的使用记录 Nlog使用 ...

  7. Fast R-CNN中的边框回归

    前面对R-CNN系的目标检测方法进行了个总结,其中对目标的定位使用了边框回归,当时对这部分内容不是很理解,这里单独学习下. R-CNN中最后的边框回归层,以候选区域(Region proposal)为 ...

  8. 19条MySQL优化准则

    1.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我们要重点关注的数据: type列,连接类型.一个好的SQL语句至少要 ...

  9. Python爬虫入门教程 38-100 教育部高校名单数据爬虫 scrapy

    爬前叨叨 今天要爬取一下正规大学名单,这些名单是教育部公布具有招生资格的高校名单,除了这些学校以外,其他招生的单位,其所招学生的学籍.发放的毕业证书国家均不予承认,也就是俗称的野鸡大学! 网址是 ht ...

  10. 理解ScheduledExecutorService中scheduleAtFixedRate和scheduleWithFixedDelay的区别

    scheduleAtFixedRate 每间隔一段时间执行,分为两种情况: 当前任务执行时间小于间隔时间,每次到点即执行: /** * 任务执行时间(8s)小于间隔时间(10s) */ public ...