调用Thread.sleep()在我的情况下不起作用

时间:2014-09-18 11:49:13

标签: c# multithreading

我安装了Visual c#2010 express,我想调用一个使用线程获取参数的方法,但是在执行该方法时,线程应该停止,我应该看到对表单的影响,以及然后该方法应该继续。 该操作只是移动Label - 从表单上form_load事件的代码生成的。{/ p>

我使用了三种不同的方法来调用Thread.sleep()方法,但是每个方法都没有被intellisense建议或导致异常 - 对于最后一种情况,我想要理解。 为什么我有这个例外,它是什么意思? 是否有更好的方法可以遵循?。

  public Thread thr;
    private void Form1_Load(object sender, EventArgs e)
    {
        Label os = (Label)this.Controls[0];
        os.Text = "codeLB";
        thr = new Thread(() => Beta(os,thr));
        thr.Start();
    }
    public void Beta(Label os,Thread tr)
    {

1.    os.Location = new Point(os.Location.X + 10, os.Location.Y + 10);


        while(os.Location.Y<=400)
        {
            this.Refresh();
            //here I want to sleep the thread.


            //tr.sleep(1000);   doesn't work (not suggested)
            //Thread.CurrentThread.sleep(1000);  doesn't work (not suggested)
            Thread.Sleep(1000);  // it works but it causes an unhandled InvalidOperationException in line 1 
"Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on."

            os.Location = new Point(os.Location.X + 10, os.Location.Y + 10);
        }
        os.Location = new Point(0, 0);
    }

非常感谢。

0 个答案:

没有答案