C#中的线程导致无限循环并阻塞我的应用程序

luc*_*dru 2 c#

我创建了一个Thread,我只需要从表单的左侧移动一个radiobutton.这运行,但我的应用程序被阻止,我无法移动表单,没有(我认为这是创建线程的原因,同时做多个事情)这是我的代码,我希望你明白我问.提前致谢

    private void moveRight( )
    {
        radioButton1.Left++;
    }
    private void moveLeft()
    {
        radioButton1.Left--;
    }
    public void run()
    {
        while (true)
        {
            while (radioButton1.Left != this.ClientSize.Width - 10)
            {
                if (InvokeRequired)
                {
                    Invoke(new MethodInvoker(moveRight));
                }
                else
                {
                    moveRight();
                }
            }
            while (radioButton1.Left != 10)
            {
                if (InvokeRequired)
                {
                    Invoke(new MethodInvoker(moveLeft));
                }
                else
                {
                    moveLeft();
                }
            }
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        t = new Thread(new ThreadStart(run)); 
        t.Start();
    }
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 7

当你调用Invoke一个控件时,你告诉它在UI线程中运行提供的代码.

鉴于此,您的代码正在启动一个新线程,然后在该线程中告诉UI线程运行一堆永远运行的代码.

现在你明白为什么UI线程被阻止了我希望?

您需要在后台线程中使用主要的while循环(即不在Invoke调用内部)并将Invoke调用限制为更新UI的小代码块.