要求: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;
}
只是初期不确定有多少个按钮,同时如果到了最大按钮数再置所有按钮颜色为默认色,接着再变色,中间还能控制暂停。
1、生成的按钮保存到一个集合中
2、使用一个线程去改变按钮颜色就好了,时间可以考虑用Random去生成
3、在非主线程中改变按钮颜色要注意这样去写
if (this.InvokeRequired) { this.Invoke(new Action<String>(ChangeText), "InvokeRequired = true.改变控件Text值"); //this.textBox1.Invoke(new Action<int>(InvokeCount), (int)mainThreadId); } else { ChangeText("在创建控件的线程上,改变控件Text值"); }
按照你的描述,事件都是连续的而不是并行的,为什么要用多线程呢?
建议使用timer,简单易用
能给点您的意见吗?详细点的!我小白,才开始弄,不太懂啊!
@tala1986: 简单的说,你可以把颜色、按钮、延迟的时间分别放在3个数组中,声明一个变量来记录当前改变颜色的按钮的索引,开一个线程来改变按钮的颜色,改变后索引加1,Sleep延迟数组中指定的时间后再改变下一个按钮的颜色就可以了。
兄弟,你怎么滥用多线程呢?
你要明白多线程也是分时间片的。