2020年9月5日星期六

.NET异步和多线程系列(五)

本系列将和大家分享.Net中的异步和多线程,本文将综合之前分享的异步和多线程来实现简单的双色球项目。

本文是.NET异步和多线程系列的第五章,本章将综合之前分享的异步和多线程来实现简单的双色球项目。

话不多说,下面我们直接进入本章主题。

首先我们来看下需求分析:

  双色球:投注号码由6个红色球号码和1个蓝色球号码组成。

  红色球号码:从01--33中选择,不重复。

  蓝色球号码:从01--16中选择。

  球号码随机的规则:远程获取一个随机数据,这个会有较长的时间损耗。

双色球项目界面设计如下:

接下来我们重点来看下代码:

模拟获取远程随机数:

using System;using System.Threading;namespace MyLottery.Common{ /// <summary> /// 解决随机数重复问题 /// 同时模拟远程请求的随机延时 /// </summary> public class RandomHelper {  /// <summary>  /// 随机获取数字并等待一段时间  /// </summary>  public int GetRandomNumberDelay(int min, int max)  {   Thread.Sleep(this.GetRandomNumber(500, 1000)); //随机休息一下   return this.GetRandomNumber(min, max);  }  /// <summary>  /// 获取随机数(解决重复问题)  /// </summary>  public int GetRandomNumber(int min, int max)  {   Guid guid = Guid.NewGuid(); //每次都是全新的ID   string sGuid = guid.ToString();   int seed = DateTime.Now.Millisecond;   for (int i = 0; i < sGuid.Length; i++)   {    switch (sGuid[i])    {     case 'a':     case 'b':     case 'c':     case 'd':     case 'e':     case 'f':     case 'g':      seed = seed + 1;      break;     case 'h':     case 'i':     case 'j':     case 'k':     case 'l':     case 'm':     case 'n':      seed = seed + 2;      break;     case 'o':     case 'p':     case 'q':     case 'r':     case 's':     case 't':      seed = seed + 3;      break;     case 'u':     case 'v':     case 'w':     case 'x':     case 'y':     case 'z':      seed = seed + 3;      break;     default:      seed = seed + 4;      break;    }   }   Random random = new Random(seed);   return random.Next(min, max);  } }}

界面核心代码如下:

using System;using System.Collections.Generic;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;using MyLottery.Common;namespace MyLottery{ /// <summary> /// 多线程双色球项目 /// 需求: ///  双色球:投注号码由6个红色球号码和1个蓝色球号码组成。 ///  红色球号码:从01--33中选择,不重复。 ///  蓝色球号码:从01--16中选择。 ///  /// 球号码随机的规则:远程获取一个随机数据,这个会有较长的时间损耗。 /// </summary> public partial class Form1 : Form {  public Form1()  {   InitializeComponent();   this.btnStart.Enabled = true;   this.btnStop.Enabled = false;  }  #region 字段和属性  #region 数据   /// <summary>  /// 红球集合 其实可以写入配置文件  /// </summary>  public string[] _redNums =  {   "01","02","03","04","05","06","07","08","09","10",   "11","12","13","14","15","16","17","18","19","20",   "21","22","23","24","25","26","27","28","29","30",   "31","32","33"  };  /// <summary>  /// 蓝球集合  /// </summary>  private string[] _blueNums =  {   "01","02","03","04","05","06","07","08","09","10",   "11","12","13","14","15","16"  };  

没有评论:

发表评论