源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

winform基于异步委托实现多线程摇奖器

  • 时间:2022-08-08 19:56 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:winform基于异步委托实现多线程摇奖器
本文实例讲述了winform基于异步委托实现多线程摇奖器。分享给大家供大家参考。具体实现方法如下:
[u]复制代码[/u] 代码如下:
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 _08_摇奖机 { //创建六个invoke方法(控件调用的时候的委托,用来给lable控件赋值) public delegate void MyDelegate1(int num); public delegate void MyDelegate2(int num); public delegate void MyDelegate3(int num); public delegate void MyDelegate4(int num); public delegate void MyDelegate5(int num); public delegate void MyDelegate6(int num); public partial class Form1 : Form { public MyDelegate1 md1; public MyDelegate1 md2; public MyDelegate1 md3; public MyDelegate1 md4; public MyDelegate1 md5; public MyDelegate1 md6; //此委托用来作异步委托,旨在让clr自动创建另一个线程来完成主线程要做的操作,以缓解主线程的压力 public delegate void MyDelegate(bool b); public Form1() { InitializeComponent(); md1 = SetLable1; md2 = SetLable2; md3 = SetLable3; md4 = SetLable4; md5 = SetLable5; md6 = SetLable6; } //用来存放子线程对象 private Thread nameThread; private int id; private void button1_Click(object sender, EventArgs e) { MyDelegate md = new MyDelegate(this.SetNumberData);; if (button1.Text.Trim()=="开始") { button1.Text = "停止"; //调用异步委托,就是在另一个线程中执行此委托绑定的方法 IAsyncResult result = md.BeginInvoke(true,null, null); } else { button1.Text = "开始"; //停止的话就相当于终止子线程 nameThread.Abort(); } //首先要想清楚 要给主线程的空间lable赋值,那么就必须是主线程干的事 //md.EndInvoke(result); } public void SetNumberData(bool b) { while (b==true) { List<int> listNum = new List<int>(); Random random = new Random(); //随机生成6个数 while (listNum.Count <= 6) { int n = random.Next(0, 10); listNum.Add(n); } //不是创建此控件的线程调用此控件的时候就必须调用invoke方法 if (this.label1.InvokeRequired) { this.Invoke(md1, listNum[0]); } else { label1.Text = listNum[0].ToString(); } if (this.label2.InvokeRequired) { this.Invoke(md2, listNum[1]); } else { label2.Text = listNum[1].ToString(); } if (this.label3.InvokeRequired) { this.Invoke(md3, listNum[2]); } else { label3.Text = listNum[2].ToString(); } if (this.label4.InvokeRequired) { this.Invoke(md4, listNum[3]); } else { label4.Text = listNum[3].ToString(); } if (this.label5.InvokeRequired) { this.Invoke(md5, listNum[4]); } else { label5.Text = listNum[4].ToString(); } if (this.label6.InvokeRequired) { this.Invoke(md6, listNum[5]); } else { label6.Text = listNum[5].ToString(); } //记录下当前的线程对象,以便于在点击停止按钮的时候终止此线程 nameThread = Thread.CurrentThread; Thread.Sleep(300); } //id=Thread.CurrentThread.ManagedThreadId; } public void SetLable1(int n) { label1.Text = n.ToString(); } public void SetLable2(int n) { label2.Text = n.ToString(); } public void SetLable3(int n) { label3.Text = n.ToString(); } public void SetLable4(int n) { label4.Text = n.ToString(); } public void SetLable5(int n) { label5.Text = n.ToString(); } public void SetLable6(int n) { label6.Text = n.ToString(); } }
程序运行结果如下所示: [img]http://files.jb51.net/file_images/article/201410/20141021144901692.png?2014921144950[/img] 希望本文所述对大家的C#程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部