多线程的学习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
原创粉丝点击