【发布时间】:2021-01-04 06:32:30
【问题描述】:
我在我的 Windows 窗体应用程序中找到了通过此 URL 移动光标的解决方案。
How to move mouse cursor using C#?
但是因为我想无限地运行但要休息一下,这样当我想停止它时,它应该停在这里是我想要实现的。
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();
}
它可以工作,但会冻结我的代码。我只想运行它,当我想停止它时,它应该停止而不是冻结。
【问题讨论】:
-
@OlivierRogier 每次有人建议
DoEvents()来“解决”这样的问题,世界都会流泪 -
@Nyerguds 这里真的不需要多线程; “每 5 秒做一次”是一个简单的计时器
-
@OlivierRogier 可以考虑:一个人可以喜欢坏事
-
@Nyerguds 在
System.Threading中有一个 和 another one 在Windows.Forms中有一个 -
@Nyerguds 有多种
Timer类型;我在这里提倡的是System.Windows.Forms.Timer,它通过sync-context 调用回UI 上下文线程;因此,虽然可能会短暂涉及一个池线程,但消费者看不到该实现细节:从他们的角度来看,只涉及 UI 线程
标签: c# winforms mouse-cursor