当前位置:编程学习 > C#/ASP.NET >>

求告诉解决下线程问题!

要求:1、动态生成不同的按钮,数量不限。假设有五个。
      2、每一个按钮都有自己的时间范围,类如:第一个可能需要5秒后改变按钮的背景色,第二个可能6秒后,第三个可能是3秒后。
      3、第一个按钮变色后,再第二个变色,以此类推。。。
      4、当到第五个变完色再从第一个开始

代码实现效果:

Thread t1;
            Thread t2;
            Thread t3;
           private void button4_Click(object sender, EventArgs e)
        {
            t1 = new Thread(t1_start);
            t1.IsBackground = true;
            t2 = new Thread(new ThreadStart(t2_start));
            t2.IsBackground = true;
            t3 = new Thread(new ThreadStart(t3_start));
            t3.IsBackground = true;
            t1.Start();
            t2.Start();
            t3.Start();
        }
        public void t1_start()
        {
            Thread.Sleep(3000);
            button1.BackColor=Color.Red;
        }
        private void t2_start()
        {
            t1.Join();
            Thread.Sleep(6000);
            button2.BackColor = Color.Red;
            
        }
        private void t3_start()
        {
            t2.Join();
            Thread.Sleep(2000);
            button3.BackColor = Color.Red;
            
        }

只是初期不确定有多少个按钮,同时如果到了最大按钮数再置所有按钮颜色为默认色,接着再变色,中间还能控制暂停 button --------------------编程问答-------------------- 求高手给解答下啊! --------------------编程问答-------------------- 互斥对象 
--------------------编程问答-------------------- 能说的详细点吗?我新手,不太明白哇!
--------------------编程问答-------------------- 看需求应该是使用一个线程能完成
1.动态创建按钮,在代码中new Button然后添加到窗体上去,
2.需要包装这些按钮,因为它有另外一个属性更新背景色的时间(ButtonItem) 颜色
3.需要管理这些ButtonItem的集合 List<ButtonItem> ButtonList
4.创建一个线程,循环部分
    while(1) {
       for(int i = 0; i < ButtonList; i++) {
          sleep(ButtonList[i].Timespan);
          ButtonList[i].Button.BeginInvoke((Action)(()=>{ 
                //自己指定颜色
                ButtonList[i].Button.BackColor = ButtonList[i].Color;
          }));
       }
       sleep(100);
    }
--------------------编程问答-------------------- 中间还能暂停怎么解决啊?以及5个不同的颜色循环? --------------------编程问答--------------------
class Program
    {
        static void Main(string[] args)
        {            
            Queue<BtnColor> queColor = new Queue<BtnColor>();
            BindQue(queColor);
            while (true)
            {
                if (queColor.Count > 0)
                {
                    BtnColor color = queColor.Dequeue();
                    Console.WriteLine(color.Color);
                    Thread.Sleep(color.DisplayTime);
                }
                else
                {
                    BindQue(queColor);
                }                    
            }
            
        }
        public static void BindQue(Queue<BtnColor> queColor)
        {            
            BtnColor btnRed = new BtnColor("Red",3000);
            queColor.Enqueue(btnRed);
            BtnColor btnYello = new BtnColor("Yello", 5000);
            queColor.Enqueue(btnYello);
            BtnColor btnBlack = new BtnColor("Black", 2000);
            queColor.Enqueue(btnBlack);
        }
    }

public class BtnColor
{
    public string Color { get; set; }
    public int DisplayTime { get; set; }
    public BtnColor(string color, int displayTime)
    {
        this.Color = color;
        this.DisplayTime = displayTime;
    }
}
--------------------编程问答-------------------- 这个权作例子,你可以用Queue --------------------编程问答-------------------- 您看我的代码思路在C#里怎么就循环不起来呢?小白求解答啊!
--------------------编程问答-------------------- 我用了下还是没成功!怎么让他循环起来啊! --------------------编程问答--------------------
引用 楼主 u010148343 的回复:
要求:1、动态生成不同的按钮,数量不限。假设有五个。
      2、每一个按钮都有自己的时间范围,类如:第一个可能需要5秒后改变按钮的背景色,第二个可能6秒后,第三个可能是3秒后。
      3、第一个按钮变色后,再第二个变色,以此类推。。。
      4、当到第五个变完色再从第一个开始

代码实现效果:

Thread t1;
          ……


你这代码肯定不行,你现在3个按钮就开3个线程,那你要是100个按钮,还开100个线程啊,那系统肯定扛不住 --------------------编程问答--------------------
引用 5 楼 u010148343 的回复:
中间还能暂停怎么解决啊?以及5个不同的颜色循环?


暂停用sleep(*); --------------------编程问答--------------------
引用 5 楼 u010148343 的回复:
中间还能暂停怎么解决啊?以及5个不同的颜色循环?


5种不同的颜色保存到一个字典(dictonary)中,key就为1-5,按照key取颜色
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,