c#用winform开发一个简易双色球项目
开始画面

抽奖中:

抽奖结果:

需要一个随机数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开发一个简易双色球项目的更多相关文章
- 使用Phalcon框架开发一个简易的博客系统
使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...
- android开发学习---开发一个简易的短信发送器
一.需求: 开发一个简易的短信发送器,输入:对方手机号码,短信内容,点击发送按钮,短信发送成功,对方手机成功收到短信. 其中要求短信内容过长时可以自动拆分,长度英文是160个英文,中文是70个,中英混 ...
- jQuery 开发一个简易插件
jQuery 开发一个简易插件 //主要内容 $.changeCss = function(options){ var defaults = { color:'blue', ele:'text', f ...
- 使用Vue2+webpack+Es6快速开发一个移动端项目,封装属于自己的jsonpAPI和手势响应式组件
导语 最近看到不少使用vue制作的音乐播放器,挺好玩的,本来工作中也经常使用Vue,一起交流学习,好的话点个star哦 本项目特点如下 : 1. 原生js封装自己的跨域请求函数,支持promise调用 ...
- 如何用django开发一个简易个人Blog
功能概要:(目前已实现功能) 公共展示部分: 1.网站首页展示已发布的博客记录,包括名称.摘要信息.发布日期.阅读量及评论数. 2.首页文章列表可按照分类筛选. 3.点击标题或阅读全文链接,进入博客阅 ...
- 从零开始开发一个简易的类vue-cli构建工具
代码地址:https://github.com/cheer4chai/webpack-learning 仿照vue-cli开发这个工具的目的是了解webpack的基本设置,以及vue-cli的工作原理 ...
- 利用MVC编程模式-开发一个简易记事本app
学了极客学院一个开发记事本的课程,利用自己对MVC编程模式的简单理解重写了一遍该app. github地址:https://github.com/morningsky/MyNote MVC即,模型(m ...
- 如何用Eggjs从零开始开发一个项目(2)
在上一篇文章,我们已经使用Sequelize连接上了数据库,并能进行简单的数据库操作,在此基础上,我们试着来开发一个完整的项目.这篇文章我们从用户的注册.登录着手,试着开发用户模块的相关的代码. 用户 ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
随机推荐
- 使用Onenote & Evernote & VSC+Markdown构建个人笔记系统
Onenote & Evernote & VSC+Markdown构建个人笔记系统 umeowbing(转载请注明出处) 1 Why 笔记本太多,全部带着太重,查找起来也很麻烦-- 笔 ...
- window 7 安装Jmeter并配置https录制脚本
安装与环境配置: http://blog.csdn.net/hhuangdanfeng/article/details/51564765 http://blog.csdn.net/u010573212 ...
- 大白话5分钟带你走进人工智能-第三节最大似然推导mse损失函数(深度解析最小二乘来源)(1)
第三节最大似然推导mse损失函数(深度解析最小二乘来源) 在第二节中,我们介绍了高斯分布的 ...
- JavaScript使用闭包实现单例模式
闭包是JS的一种特性,其中一点就是:可以将外部函数的变量保存在内存中,利用这一特性,我们可以用来实现类的单例模式. 首先需要了解何为单例模式: 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问 ...
- mybatis 增加热加载xml
由于在本地开发环境上每次修改mybatis xml文件都需要手动重启服务,调试的很麻烦,所以需要热加载xml文件来避免浪费时间,于是网上搜一下资料,看了下有一大堆,但试了下真正能跑起来没有(大都代码没 ...
- 【由浅至深】redis 实现发布订阅的几种方式
非常感谢依乐祝发表文章<.NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐>,对csredis作了一次完整的诠释. 前言 提到消息队列,最熟悉无疑是 rabbitmq,它基 ...
- SQL 存储过程中事务回滚
在事务语句最前面加上 set xact_abort on GO SET QUOTED_IDENTIFIER OFF GO ALTER PROCEDURE [dbo].[test] @a int, @b ...
- 转://IO的基础概念
磁盘IO.网络IO 对磁盘的每个IO就是在磁盘与一些RAM单元之间相互传送一些相邻的扇区的内容. 磁盘IO延时(IO Latency): 也称为IO响应时间,是指内核对磁盘发出一个 ...
- WebGL绘制有端头的线
关于WebGL绘制线原理不明白的小伙伴,可以看看我之前的文章WebGL绘制有宽度的线.这一篇我们主要来介绍端头的绘制,先看效果图. 端头一般被称为lineCap,主要有以下三种形式: butt最简单等 ...
- CDI服务
前言 CDI(Contexts and Dependency Injection 上下文依赖注入),是JAVA官方提供的依赖注入实现,可用于Dynamic Web Module中,将依赖注入IOC/D ...