我想了解更多关于线程的信息,并创建了一个可以更改标签背景颜色的小测试应用程序。简单线程测试
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//lblColor
public Color theLabel
{
get { return this.lblColor.BackColor; }
set { this.lblColor.BackColor = value; }
}
//btnStart
private void btnStart_Click(object sender, EventArgs e)
{
ThreadTest cColor = new ThreadTest();
Thread tColor = new Thread(new ThreadStart(cColor.ChangeColor));
tColor.Start();
}
}
而且......
public class ThreadTest
{
public void ChangeColor()
{
Form1 foo = new Form1();
while (true)
{
foo.theLabel = Color.Aqua;
foo.theLabel = Color.Black;
foo.theLabel = Color.DarkKhaki;
foo.theLabel = Color.Green;
}
}
}
唯一的问题是,为什么我不能让这段代码的工作?我可以看到ChangeColor中的代码运行,但标签的颜色不变。
那是因为你的线程”不是个考虑的想法t异步...表单确实与您更改的代码驻留在同一个线程中,因此表单无法重绘本身。我只是懒得现在形成一个答案,这正是解释为什么以及如何使用代表。 – Bobby 2010-11-05 14:53:56
正如我在下面的答案所述,代码不工作,因为Form1 foo = new Form1();在ThreadTest.ChangeColor ...使用参数化线程启动...关于backgroundworker等所有建议也是好主意。 – 2010-11-05 15:00:38