创建 Winform 项目并设计界面

编写代码实现切换逻辑
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 抽奖小游戏
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 关闭跨线程安全检查(快速实现,若需规范可改用Invoke,后面有说明)
Control.CheckForIllegalCrossThreadCalls = false;
// 建议:设置Label样式(居中、放大字体,情侣版更美观)
label1.Font = new Font("微软雅黑", 12F, FontStyle.Bold);
label1.AutoSize = true;
label1.TextAlign = ContentAlignment.MiddleCenter;
label1.Dock = DockStyle.None;
}
// 情侣专属奖品列表(含空奖,可自由修改/增减)
string[] prizes = {
"电影票2张(任选影片)",
"奶茶双人套餐",
"清空购物车(≤200元)",
"亲手做一顿爱心晚餐",
"周末短途旅行1次",
"口红1支(你选色号)",
"游戏陪玩2小时",
"拥抱+亲亲奖励",
"谢谢参与,下次给你大惊喜~", // 空奖
"专属按摩服务30分钟",
"零食大礼包1份",
"谢谢参与,今晚洗碗我包了~", // 空奖
"定制情侣钥匙扣1对",
"奶茶免单1杯",
"谢谢参与,明天带你吃早餐~", // 空奖
"双人DIY手工银戒1对(刻专属暗号)",
"帮你洗袜子1周(承包所有臭袜子)",
"情侣写真拍摄1套(含精修10张)",
"谢谢参与~ 今晚的水果我切好喂你吃",
"按摩服务1小时(肩颈+腰背全放松)",
"情侣保温杯1对(刻名字缩写)",
"深夜压马路+吃路边摊(全程我买单)",
"下次补你大惊喜!现在先给个亲亲奖励",
"专属发型师服务(我帮你吹头发+编发)",
"暖手宝1个(冬天我帮你捂热)",
"一起拼情侣拼图(1000片,拼完裱起来)",
"谢谢参与~ 明天我早起做早餐",
"情侣手链1对(磁吸款,分开会想念)",
"早餐投喂服务3天(起床就有热乎的)",
"星空露营1晚(带帐篷+烧烤+看星星)",
"虽然没中大奖,但我会多抱你5分钟",
"笔记本1本(我写满情话给你)",
"游戏上分服务(帮你打10颗星)",
"打卡网红餐厅(你选店,我买单)",
"谢谢参与~ 今晚的垃圾我倒,碗我洗",
"毛绒玩偶1个(替我陪你睡觉)",
"情侣瑜伽体验课1节(零基础友好)",
"泡脚服务20分钟(加艾草+帮你擦脚)",
"定制情侣手机壳1对(印合照)",
"惊喜正在加载中,下次一定中大奖!"
};
private Thread drawThread; // 抽奖线程
private bool isDrawing = false; // 抽奖开关(true=滚动,false=停止)
private readonly Random random = new Random(); // 随机数对象(避免重复)
// 开始/停止抽奖按钮
private void button1_Click(object sender, EventArgs e)
{
if (!isDrawing)
{
// 启动抽奖:新建线程并开始滚动
isDrawing = true;
drawThread = new Thread(ShowPrize);
drawThread.IsBackground = true; // 设为后台线程,关闭窗体时自动退出
drawThread.Start(prizes);
button1.Text = "停止抽奖";
label1.Text = "抽奖中..."; // 滚动时提示
}
else
{
// 停止抽奖:关闭开关,线程自动退出循环
isDrawing = false;
button1.Text = "开始抽奖";
}
}
// 线程执行:循环滚动显示奖品
private void ShowPrize(object obj)
{
string[] prizeList = obj as string[];
if (prizeList == null || prizeList.Length == 0)
{
label1.Text = "暂无奖品";
return;
}
// 循环滚动,直到开关关闭
while (isDrawing)
{
// 随机抽取1个奖品(含空奖)
int randomIndex = random.Next(prizeList.Length);
string currentPrize = prizeList[randomIndex];
// 显示当前滚动的奖品
label1.Text = currentPrize;
// 控制滚动速度(50毫秒/次,比原来快,更有抽奖感,可调整)
Thread.Sleep(50);
}
}
// 窗体关闭:安全终止线程
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// 关闭抽奖开关,让线程自然退出(比Abort()安全,避免资源泄漏)
isDrawing = false;
// 等待线程结束(最多等500毫秒,防止卡死)
if (drawThread != null && drawThread.IsAlive)
{
drawThread.Join(500);
}
}
}
}
效果演示

希望对大家有所帮助。感谢大家的关注和点赞。
5万+

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



