using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace shibai
{
public partial class Form3 : Form
{
delegate void SetLabelTextDelegate(Label lb, String text);
SetLabelTextDelegate setLabelTextDel;
bool isStart = false;
Thread[] ths = new Thread[6];
Random r = new Random(DateTime.Now.Millisecond);
public Form3()
{
InitializeComponent();
setLabelTextDel = new SetLabelTextDelegate(this.setText);
}
private void button1_Click(object sender, EventArgs e)
{
if (isStart == false)
{
isStart = true;
button1.Text = "停止";
label8.Text = "";
for (int i = 0; i < 6; i++)
{
ths [i]=new Thread (new ParameterizedThreadStart (this.changeNumber ));
ths [i].Start ((Label )this.Controls ["label"+(i+1).ToString ()]);
}
}
else
{
isStart =false;
button1.Text = "开启";
label8.Text =string .Format ("中奖号码:{0} {1} {2} {3} {4} {5}", label1.Text ,label2 .Text ,label3 .Text ,label4 .Text ,label5.Text ,label6.Text ,label7 .Text );
}
}
private void changeNumber(object label)
{
Label lb = (Label)label;
int number = 0;
while (isStart)
{
number = r.Next(10);
this.Invoke(setLabelTextDel, lb, number.ToString());
Thread.Sleep(100);
}
}
private void setText(Label lb, string text)
{
lb.Text = text;
}
private void Form3_FormClosing(object sender, FormClosingEventArgs e)
{
if (isStart)
{
MessageBox.Show("请先停止摇奖机,再点关闭");
e.Cancel = true;
}
}
}
}
本文介绍了一个使用 C# 编写的多线程抽奖程序。该程序通过多个线程模拟滚动显示数字的效果,当点击按钮时可以开始或停止抽奖过程,并最终显示出中奖号码。文章展示了如何在 Windows Forms 应用程序中安全地更新 UI 组件。

1039

被折叠的 条评论
为什么被折叠?



