求告诉解决下线程问题!
要求: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--------------------编程问答-------------------- 这个权作例子,你可以用Queue --------------------编程问答-------------------- 您看我的代码思路在C#里怎么就循环不起来呢?小白求解答啊!
{
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;
}
}
--------------------编程问答-------------------- 我用了下还是没成功!怎么让他循环起来啊! --------------------编程问答--------------------
你这代码肯定不行,你现在3个按钮就开3个线程,那你要是100个按钮,还开100个线程啊,那系统肯定扛不住 --------------------编程问答--------------------
暂停用sleep(*); --------------------编程问答--------------------
5种不同的颜色保存到一个字典(dictonary)中,key就为1-5,按照key取颜色
补充:.NET技术 , C#