如何使用C#使用while infinite循环移动鼠标光标?

如何使用C#使用while infinite循环移动鼠标光标?,c#,winforms,mouse-cursor,C#,Winforms,Mouse Cursor,我在Windows窗体应用程序中找到了通过此URL移动光标的解决方案。 但是我想无限地跑,但是要有一个休息,这样当我想停下来的时候,它应该停在这里,这就是我想要达到的目标。 private void btnMove_Click(object sender, EventArgs e) { //int i = 0; while (true) { //i++; Cursor = new Cu

我在Windows窗体应用程序中找到了通过此URL移动光标的解决方案。
但是我想无限地跑,但是要有一个休息,这样当我想停下来的时候,它应该停在这里,这就是我想要达到的目标。

    private void btnMove_Click(object sender, EventArgs e)
    {
        //int i = 0;
        while (true)
        {
            //i++;
            Cursor = new Cursor(Cursor.Current.Handle);
            Cursor.Position = new Point(Cursor.Position.X - 40, Cursor.Position.Y - 40);
            Thread.Sleep(5000);
            Cursor.Position = new Point(Cursor.Position.X + 40, Cursor.Position.Y + 40);
        }

        //Task t = new Task(() =>
        //{
        //});
        //t.Start();
    }

它可以工作,但冻结了我的代码。我只想运行它,每当我想停止它时,它应该停止而不是冻结。

最终,这里的答案是:“不要”

Windows窗体基于消息泵。如果一条消息(如“单击”)中有一个事件处理程序会永远循环,它将永远不会处理其他消息(如“绘制”),因此:您的应用程序现在没有响应


不要使用无限循环:使用
计时器
,并移动回调中的位置。在这种情况下,一个
System.Windows.Forms.Timer
最合适。

@OlivierRogier每当有人建议
DoEvents()
来“修复”这样的问题时,世界都会哭一场tear@Nyerguds这里真的不需要多线程;“每5秒钟做一件事”是一个简单的方法timer@OlivierRogier也许考虑一下:一个人可以爱得不好things@Nyerguds
System.Threading
Windows.Forms
@Nyerguds中有一个
计时器
类型;我在这里提倡的是
System.Windows.Forms.Timer
,它是通过同步上下文调用回UI上下文线程的;因此,虽然可能会涉及一个池线程,但消费者看不到实现细节:从他们的角度来看,只涉及UI线程