各位大虾好:线程间操作无效: 从不是创建控件“”的线程访问它 怎么办啊???
下面是我的相关部分代码:Label lblA,lblB;
void moveAB()
{
     Label swap,destPie;
     destPie = lblB;
     swap lblA;     Thread moveThread = new Thread(delegate() {
          movePie(swap, destPie,'A','B'); });     moveThread.Start();
     moveThread.Join();
}
//------------------------------------------------------------------
private void movePie(Label move, Label destPie, char start, char dest)
{
     while(true)
     {
         move.Top += 5;
         move.Left += 5;
         Thread.Sleep(100);
     }
}

解决方案 »

  1.   

    private void movePie(Label move, Label destPie, char start, char dest) 

        while(true) 
        { 
            setTop(move,5);
            Thread.Sleep(100); 
        } 
    }delegate void setDelegate(Label move ,int pra);
    void setTop(Label move,int pra)
    {
            if ( this.InvokeRequired )
                    this.Invoke( new setDelegate(setTop) , new Object[]{ move , par } );
            else
                    move.Top += pra;
    }
      

  2.   

    到MSDN去学习一下System.Windows.Forms.Control.Invoke(Delegate d); 这个方法
      

  3.   


    this.invoke(new eventhanlder(delegate{
    //写在这里
    }));
      

  4.   

    2楼您好:
    我用你的代码试了一下,可以,
    但是在下面这一句中
    this.Invoke( new setDelegate(setTop) , new Object[]{ move , par } ); 
    出现了这个异常:
    System.ObjectDisposedException
    无法访问以释放的对象。怎么解决啊???
    谢谢
      

  5.   

    他面的都是挺好的办方法。还有一种次法:把该代码写在构造函数里:System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;