public FrmErnie() { InitializeComponent(); //不设置这个属性的话在后面就会报错 Control.CheckForIllegalCrossThreadCalls = false; } ////创建一个线程执行 Thread t; //给定一个bool值判断是否执行还是停止 bool isStartEnd = false; private void btnStart_Click(object sender, EventArgs e) { if (isStartEnd) { string result1, result2, result3, result4, result5, result6; //获取空间上面所得到的值 result1 = lblResult.Text; result2 = lblResult1.Text; result3 = lblResult2.Text; result4 = lblResult3.Text; result5 = lblResult4.Text; result6 = lblResult5.Text; //判断当用户单击结束的时候显示的结果 btnStart.Text = "开始"; lblErnieResult.Text += result1 + result2 + result3 + result4 + result5 + result6; isStartEnd = false; } else { lblErnieResult.Text = ""; t = new Thread(GetNum); t.IsBackground = true; t.Start(); btnStart.Text = "结束"; isStartEnd = true; } } //定义一个方法实现随机数的读取 void GetNum() { //定义随机数 Random rand = new Random(); //生成一个随机数 while (true) { if (isStartEnd) { lblResult.Text = rand.Next(9).ToString(); lblResult1.Text = rand.Next(9).ToString(); lblResult2.Text = rand.Next(9).ToString(); lblResult3.Text = rand.Next(9).ToString(); lblResult4.Text = rand.Next(9).ToString(); lblResult5.Text = rand.Next(9).ToString(); Thread.Sleep(200); } } }
你这个肯定不行,在方法内实例化一个random,这样会使产生的随机数一样,这是因为random是一个伪随机类
再细看了一下,各种错啊
@壹卄の➹: 什么错误呢???
@Kencery: 你的这种写法你要n创建多少个线程呢,要是写一千个数字呢?,一万甚至更多呢?难道你开启一千个线程??new Thread(GetNum)!!
@Kencery: 之前我只是看了一下你的代码,就直接判断了,没有对代码进行编译,是我的不对。
刚我运行了一下,你的代码存在一个问题:没有终止线程,当多点几次之后,占用过多cpu电脑变卡。于是我加了一个终止线程的代码:
if (isStartEnd)
{
string result1, result2, result3, result4, result5, result6;
//获取空间上面所得到的值
result1 = lblResult.Text;
result2 = lblResult1.Text;
result3 = lblResult2.Text;
result4 = lblResult3.Text;
result5 = lblResult4.Text;
result6 = lblResult5.Text;
//判断当用户单击结束的时候显示的结果
btnStart.Text = "开始";
lblErnieResult.Text += result1 + result2 + result3 + result4 + result5 + result6;
isStartEnd = false;
t.Abort();//这个是我加进去的,用来终止线程
}
在你的这段代码中我有一个地方不明白,就是你产生随机数的方法怎么就能产生不同的随机数,我之前也是用这种方法产生随机数的,6个随机数产生的结果是一样的,这个也是可以通过查msdn找到的,里面有一个是关于伪随机数的介绍,你看看就知道了,这也是我直接对你的代码一看就否定的原因
@壹卄の➹: 其实这样写线程是已经终止的,不需要再终止,因为我是用bool类型来判断的,所以,但是加上也行,下面的那个是因为我给每个控件 lblResult.Text = rand.Next(9).ToString();都执行可这个,所以他获取的信息不一样!!
Thread.Sleep(150)
程序中加了延时啊
跟这个应该没有关系吧 这是让线程休息一下
你说的是哪里存在延时,问题再具体些……
你看图片,就是抽奖的结果与摇出来的结果不一样
双色球中奖了