WinForm+C#小案例--->年会抽奖人名小程序
·
创建 Winform 项目并设计界面

编写代码实现切换逻辑
using System;
using System.Threading;
using System.Windows.Forms;
namespace _02_多线程传参案例
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 关闭跨线程访问
Control.CheckForIllegalCrossThreadCalls = false;
}
// 抽奖名字列表
string[] names = { "王五", "赵六", "孙七", "周八", "吴九", "郑十", "钱一", "冯二", "陈三", "褚四", "卫五", "蒋六", "沈七", "韩八", "杨九", "朱十", "秦一", "尤二", "许三", "何四" };
// 保存抽奖线程的变量
private Thread thread;
// 创建随机对象
Random random = new Random();
// 定义一个线程的“开关”(true=运行,false=停止)
private bool flag = false;
// 开始抽奖
private void button1_Click(object sender, EventArgs e)
{
if (!flag)
{
// 新建线程,指定执行ShowNames方法,并传入names数组作为参数
thread = new Thread(ShowNames);
thread.Start(names);
button1.Text = "停止"; // 按钮文本改成“停止”
flag = true; // 打开线程开关
}
else
{
button1.Text = "开始抽奖"; // 按钮文本改回“开始”
flag = false; // 关闭线程开关(线程会自动退出循环)
}
}
// 线程执行的方法:循环刷新Label显示名字
private void ShowNames(object obj)
{
// 将传入的参数转为string[]类型
string[] names = obj as string[];
while (true)
{
// 开关等于false
if (!flag)
{
break;
}
// 从数组中随机抽取三个人名
string name1 = "";
string name2 = "";
string name3 = "";
while (true)
{
name1 = names[random.Next(names.Length)];
name2 = names[random.Next(names.Length)];
name3 = names[random.Next(names.Length)];
if (!name1.Equals(name2) && !name1.Equals(name3) && !name2.Equals(name3))
{
break;
}
}
// 赋值
label1.Text = name1;
label2.Text = name2;
label3.Text = name3;
Thread.Sleep(188);
}
}
// 窗口关闭事件
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (thread != null)
{
thread.Abort();// 终止
}
}
}
}
测试演示

希望对大家有所帮助。感谢大家的关注和点赞。
更多推荐


所有评论(0)