Add()和Add1()里面都加上lock(this) ,则两个标签只能轮流显示数字变化,取消其中的一个lock(this)或者两个方法都不要lock(this),则可以同时显示数字变化。不知道其中的原因,lock(this)到底锁定的是什么,msdn上说的是锁定代码块,但是现在是两个方法的代码,怎么也会被锁定呢?请大家指点一二,谢谢Thread myThread;
Thread myThread1;
public void Add()
{
lock(this)
{
for(int i =20 ; i >= 0; i--)
{
Thread.Sleep(200);
label1.Text = i.ToString();
}
}
}
public void Add1()
{
lock(this)
{
for(int j = 0 ; j <= 20; j++)
{
Thread.Sleep(200);
label2.Text = j.ToString();
}
}
}private void Form1_Load(object sender, System.EventArgs e)
{
myThread = new Thread(new ThreadStart(Add));
myThread1 = new Thread(new ThreadStart(Add1)); myThread.Start();
myThread1.Start();
}
Thread myThread1;
public void Add()
{
lock(this)
{
for(int i =20 ; i >= 0; i--)
{
Thread.Sleep(200);
label1.Text = i.ToString();
}
}
}
public void Add1()
{
lock(this)
{
for(int j = 0 ; j <= 20; j++)
{
Thread.Sleep(200);
label2.Text = j.ToString();
}
}
}private void Form1_Load(object sender, System.EventArgs e)
{
myThread = new Thread(new ThreadStart(Add));
myThread1 = new Thread(new ThreadStart(Add1)); myThread.Start();
myThread1.Start();
}
你是在vs2005中编译我的程序吧,05中对线程间调用有限制的,临时解决方法是在构造函数中:
Form.CheckForIllegalCrossThreadCalls = false;
不用检查非法的跨线程调用(权益之计)