我在做一个自动点击器,我有一个问题:我希望程序在按住C键的同时执行Click()方法。
我试过这个。一旦我按下一个键,我的代码就陷入了无限循环。我在StackOverflow上看到过类似的问题,但它对我不起作用。下面是我的代码:
private static bool IsHolded = false;
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
Keys key = e.KeyData;
if (key == Keys.C)
{
IsHolded = true;
while (IsHolded)
{
Click();
}
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
IsHolded = false;
}
1条答案
按热度按时间6yt4nkrj1#
根据您的概念,您可以用不同的方式实现它。您可以在另一个线程中运行内部代码,并通过CancellationToken处理KeyUp事件。下面是一个实现:
没有必要初始化IsHolded变量,除非您希望在按住'c'键时使用它来防止多次执行。为此,您应该检查KeyPress方法中IF语句内的IsHolded值:
如果(键== Keys.C &&!IsHolded)
请记住,如果您取消CancellationTokenSource,它将保持取消状态,并且在您下次按下'c'键时不会工作。因此,如果您希望处理它,您应该在KeyUp方法中Dispose并重新初始化旧的'ctx'。以下是两篇关于CancelationToken的文章。
Cancellation in Managed Threads和Register callbacks for cancellation requests的函数