C#用timer控件实现1~100随机数抽奖,已经抽中的不参与下一次循环,求代码
C#用timer控件实现1~100随机数抽奖,已经抽中的不参与下一次循环,求代码,哪位大神指点一下。...
C#用timer控件实现1~100随机数抽奖,已经抽中的不参与下一次循环,求代码,哪位大神指点一下。
展开
1个回答
展开全部
直接Random.Next(1, 101)可产生随机数,用一个List<int>存起来,每次新随机就会去这个List中找,如果找到就再随机,自到随机出新的数。
1、放一个TextBox框、要把MultiLine属性改成True。(模拟输出结果)
2、放个Timer
3、放个Button。
4、定义两个全局对象
int inTimer = 0; //原子锁对象
List<int> DBList = new List<int>(); //集合
写Button的_Click事件就一句话了
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true; //开Timer
}
写Timer的Tick事件
private void timer1_Tick(object sender, EventArgs e)
{
//加原子锁,由于随机可能时间过长,造成多线程进入,污染DBList对象
if (Interlocked.Exchange(ref inTimer, 1) == 0)
{
Random rand = new Random(); //随机器
int nums = 0;
do
{
nums = rand.Next(1, 101); //1~100之间一个int
} while (DBList.Where(a => a == nums).Count() > 0);
DBList.Add(nums); //放到集合中
//在textbox1中输入
textBox1.Text = String.Join("\r\n", DBList.ToArray());
if (DBList.Count == 100) //100个数都出现了就关Timer
{
timer1.Enabled = false;
MessageBox.Show("结束!");
}
Interlocked.Exchange(ref inTimer, 0); //解原子锁
}
}
更多追问追答
追问
原子锁我倒是不需要,我的页面是用一个button来点击开始和停止,Timer控制出来的随机数用label在页面滚动显示,停止的时候出来一个数,再开始滚动的时候这个数就不包括在里面了。求指点...
追答
你的意思就是timer1的作用,就是不停的随机出来数据,并显示到Label上,当你点按钮就停下来。其实真正随机是在按钮点停下来之后,会随一个1~100的数。对吧?
1、加全局List
List<int> DBList = new List<int>(); //集合
2、Timer_Tick事件
private void timer1_Tick(object sender, EventArgs e)
{
Random rand = new Random();
label1.Text = rand.Next(1, 101).ToString(); //不停的随机1~101
}
3、Button_Click
private void button1_Click(object sender, EventArgs e)
{ //按钮是个互斥的,你点一下是开始,再点一下是结束
if (timer1.Enabled == true)
{
timer1.Enabled = false; //结束时会真正随机一个数放到List
if (DBList.Count < 100)
{
Random rand = new Random(); //随机器
int nums = 0;
do
{
nums = rand.Next(1, 101); //1~100之间一个int
} while (DBList.Where(a => a == nums).Count() > 0);
DBList.Add(nums); //放到集合中
label1.Text = nums.ToString();
}
else
{
label1.Text = "100个数全随机出来了!";
}
}
else
{
timer1.Enabled = true; //开
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询