c# 多线程编程实际应用-winform实现简易的双色球

需求:

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

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

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

设计逻辑

点击开始按钮:7个球就应该变化

点击开始,都在变化,每一个都相互没有影响,每个球之间没有任何规律

要求每个球的变化:要相互不影响;完全独立---多线程的特点:多线程就是每个线程是完全独立的,相互没有影响的;

开始:

一、多线程完成

1、七个球->7个线程

2、每个线程负责一个球的不断变换

二、如何去变化

1.开启线程

2.在这个线程内部---要在需求指定的球号码所在范围内;取值

3.赋值给球

4.要不断的变化---循环---不断的取值,赋值--(不断的变)

三、重复怎么解决?

1.在赋值的时候,先判断一下,如果重复,再生成一个,重新去赋值;

2.加锁

四、开奖

1.应该让循环变化的球要停止下来

2.把界面上所有的球号码弹出来

代码部分
1、frmSSQ.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StudyThread
{
    public partial class FrmSSQ : Form
    {
        /// <summary>
        /// 红球集合
        /// </summary>
        private 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"
        };
        private readonly static object _lock = new object();
        private bool IsGon = true;
        private List<Task> tasks = new List<Task>();
        public FrmSSQ()
        {
            InitializeComponent();
        }

        private void btnstart_Click(object sender, EventArgs e)
        {
            // 初始化
            tasks = new List<Task>();
            this.btnstart.Text = "正在开始...";
            this.btnstart.Enabled = false;
            this.btnstop.Enabled = true;
            // 把7个球都重置为00
            this.labelBlue1.Text = "00";
            this.labelRed1.Text = "00";
            this.labelRed2.Text = "00";
            this.labelRed3.Text = "00";
            this.labelRed4.Text = "00";
            this.labelRed5.Text = "00";
            this.labelRed6.Text = "00";

            foreach (var control in this.gboSSQ.Controls)
            {
                if(control is Label)
                {
                    Label label = (Label)control;
                    tasks.Add(Task.Run(() =>
                    {
                        if(label.Name.Contains("Blue")) // 蓝色球
                        {
                            // BlueNums中取数据;通过索引来取
                            //随机的取: 随机的获取索引 
                            while(IsGon)
                            {
                                // 索引最大是16
                                var index = new RandomHelper().GetRandomNumber(0, 16); 
                                string num = BlueNums[index];
                                this.Invoke(new Action(() =>
                                {
                                    label.Text = num;
                                }));
                            }
                        }
&nb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值