多线程的学习2(小应用)
来源:互联网 发布:软件开发工作计划表 编辑:程序博客网 时间:2024/06/05 22:35
应用多线程做一个摇奖的小程序
基本内容是有6个label标签显示随机数字,
点击启动摇奖,开启摇奖线程,
点击停止,关闭线程
下面是全部源代码
//控制是否停止 bool isRuning = false; //创建一个集合来存放label,方便线程的访问 List<Label> label = new List<Label>(); private void Form1_Load(object sender, EventArgs e) { //使用代码创建6个label标签 for (int i = 0; i < 6; i++) { Label lb = new Label(); //自适应 lb.AutoSize = true; lb.Text = "0"; //设置位置 lb.Location = new Point(50 + i * 50, 80); label.Add(lb); this.Controls.Add(lb); } } //启动摇奖 private void button1_Click(object sender, EventArgs e) { isRuning = true; //创建线程来改变label的值 Thread thread = new Thread(() => { //不断地改变 Random random = new Random(); // MessageBox.Show(this.Text); while (isRuning) { foreach (var item in label) { var str = random.Next(1, 23).ToString(); if (item.InvokeRequired) { item.Invoke(new Action<string>(s=>{item.Text=s;}),str); } else { item.Text = str; } } Thread.Sleep(200); } }); thread.IsBackground = true; thread.Start(); } //关闭 private void button2_Click(object sender, EventArgs e) { isRuning = false; }
这里有几个需要注意的点:
(1)
List<Label> label = new List<Label>();将创建的label放在集合中,课以方便下面线程的操控
(2)
bool isRuning = false;用这个变量可以控制线程中While的进入与跳出,即开启与关闭
(3)
if (item.InvokeRequired)使用这句可以解决跨线程访问控件的问题,
在里面调用Invoke方法,就可以用一个委托调用别的线程中的控件了
0 0
- 多线程的学习2(小应用)
- GCD的一些小应用(多线程)
- (小白)unity多线程的学习:Loom-ThreadPoolScheduler类
- Android学习小Demo(20)关于Fragment的应用
- QQ空间日志抓器---我的第一个winform小应用(多线程,附源码)
- 多线程的应用 多线程
- Java多线程学习与Java多线程的简单应用
- 算法学习--栈的小应用
- 深度学习的几个实际小应用!
- 多线程的学习2
- 一个多线程的小例子---C#高级编程学习
- 菜鸟的学习之旅-APUE多线程小例子(1)
- 学习VC多线程时随手写的一个小例子
- 多线程的小示例
- 多线程的小知识点
- 多线程的小demo
- 机器学习小试(5)机器学习应用前的认识准备
- 黑马程序员---第四讲 多线程的应用(2)
- IP address could not be resolved: Temporary failure in name resolution
- Linux工具
- Hadoop分布式文件存储系统HDFS高可用HA搭建(何志雄)
- Eclipse 调优及使用小细节
- 两个数组元素相同,顺序不同,进行正确匹配
- 多线程的学习2(小应用)
- iOS —— 获取Mac地址
- MAHOUTR 安装详解
- Android Service
- 《ArcGIS Engine+C#实例开发教程》第二讲 菜单的添加及其实现
- 使用csdn-markDown编辑器
- Android继承ActionBarActivity之后,出现闪退情况解决方法
- SOJ 连分数问题解题报告
- Spring security AccessDeniedHandler 不被调用