一个带线程的抽奖机

  由于经常看到老师搞个随机数,来点人回答问题。

  那个程序未免也太傻瓜式了,一点就产生了一个数,毫无悬念的就出来结果了。

  就想让那个过程动起来,可以人为的控制开始和结束的过程。

  也就是一个不断给lalble赋值的过程,于是就写了一个while的死循环,不点暂停,它就一直在给lalble赋值。

  那么问题来了,這样不断赋值的过程就造成的窗体的假死现象。程序就死在那,暂停也没有用。

  于是找了点资料。开启一个新的线程来执行这个命令就好了。

  上图(觉得界面效果做得还不错)

    

  代码其实也蛮简单的(一个选姓名的,一个选彩票的,可以自己设置候选项)

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 using CCWin;
 10 using System.Threading;
 11 using System.Media;
 12 using System.IO;
 13 
 14 namespace 抽奖机
 15 {
 16     public partial class Form1 : CCSkinMain   //Form//CCSkinMain
 17     {
 18         public Form1()
 19         {
 20             InitializeComponent();
 21         }
 22 
 23         Random R = new Random();//随机数
 24 
 25         //加载
 26         private void Form1_Load(object sender, EventArgs e)
 27         {
 28             CheckForIllegalCrossThreadCalls = false;//禁止跨线程检查
 29             this.TabPage.Parent = this.TabControl1;//显示page1
 30         }
 31 
 32         //按姓名随机选
 33         bool a = false;
 34         private void btnNameGo_Click(object sender, EventArgs e)
 35         {
 36             //music.SoundLocation = @"1.wav";  //路径,背景音乐
 37             Thread th2 = new Thread(name);//创建一个线程(来调用name方法)
 38             if (a == false)
 39             {
 40                 th2.IsBackground = true;//设置为后台线程
 41                 th2.Start();//开启线程
 42                 btnNameGo.Text = "停 止";
 43                 //music.Play();//播放背景音乐
 44                 a = true;
 45             }
 46             else
 47             {
 48                 a = false;
 49                 th2.Abort();//结束线程
 50                 btnNameGo.Text = "开 始";
 51                 //music.Stop();//停止播放
 52             }
 53         }
 54         public void name()
 55         {
 56             while(a)
 57             {
 58                 int x=R.Next(0, lbl.Items.Count);
 59                 lalN.Text = lbl.Items[x].ToString();
 60             }
 61         }
 62 
 63         //福彩3D
 64         bool b = false;
 65         private void btnGo_Click_1(object sender, EventArgs e)
 66         {
 67             Thread th = new Thread(PlayGame);
 68             if (b == false)
 69             {
 70                 th.IsBackground = true;
 71                 btnGo.Text = "停 止";
 72                 th.Start();
 73                 b = true;
 74             }
 75             else
 76             {
 77                 b = false;
 78                 th.Abort();
 79                 btnGo.Text = "开 始";
 80             }
 81         }
 82         public void PlayGame()
 83         {
 84             while (b)
 85             {
 86                 lalNum1.Text = R.Next(0, 10).ToString();
 87                 lalNum2.Text = R.Next(0, 10).ToString();
 88                 lalNum3.Text = R.Next(0, 10).ToString();
 89             }
 90         }
 91 
 92         //背景音乐,去掉了
 93         //SoundPlayer music = new SoundPlayer();
 94 
 95 
 96         //添加学生姓名
 97         private void btnTj_Click(object sender, EventArgs e)
 98         {
 99             if (txtName.Text=="")
100             {
101                 MessageBox.Show("添加的姓名不能为空!","提示",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
102                 return;
103             }
104             lbl.Items.Add(txtName.Text);
105             //MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
106         }
107 
108         //清空所有名单
109         private void btnQK_Click(object sender, EventArgs e)
110         {
111             if (MessageBox.Show("您确定要移除所有名单吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk)==DialogResult.Yes)
112             {
113                 lbl.Items.Clear();
114             }
115         }
116         int i = -1;
117         private void lbl_SelectedIndexChanged(object sender, EventArgs e)
118         {
119             txtName.Text = lbl.Text;
120             i = lbl.SelectedIndex;
121         }
122 
123         //移除一个人
124         private void btnCL_Click(object sender, EventArgs e)
125         {
126             if (i == -1)
127             {
128                 MessageBox.Show("请先选中移除目标!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
129                 return;
130             }
131             lbl.Items.RemoveAt(i);
132             i = -1;
133         }
134 
135         //图片的
136         bool c = false;
137         private void btnIMG_Click(object sender, EventArgs e)
138         {
139             Thread th3 = new Thread(PlayImg);
140             if (c == false)
141             {
142                 th3.IsBackground = true;
143                 btnIMG.Text = "停 止";
144                 th3.Start();
145                 c = true;
146             }
147             else
148             {
149                 c = false;
150                 th3.Abort(); 
151                 btnIMG.Text = "开 始";
152             }
153         }
154         public void PlayImg()
155         {
156             int max = imageList1.Images.Count;
157             while (c)
158             {
159                 int x1 = R.Next(0, lbl.Items.Count);
160                 lalName1.Text = lbl.Items[x1].ToString();//图片的
161                 int x2 = R.Next(0, lbl.Items.Count);
162                 lalName2.Text = lbl.Items[x2].ToString();
163             }
164         }
165     }
166 }

 

转载于:https://www.cnblogs.com/gx-143/p/5554145.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值