You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现按住C键时持续执行Click()方法?(自动点击器开发)

问题原因与解决方案

你的代码陷入无限循环的核心问题:KeyDown事件中的while循环直接阻塞了UI线程。当按住C键触发KeyDown后,循环会持续占用UI线程,导致程序无法处理后续的KeyUp事件,IsHolded永远不会被设为false,循环无法终止。

正确实现方式(使用WinForms Timer)

用Timer控件替代while循环,既能持续执行点击逻辑,又不会阻塞UI线程,同时能正常响应KeyUp事件停止点击。

  1. 在窗体设计器中添加一个Timer控件(命名为clickTimer),设置Interval为你需要的点击间隔(比如100毫秒,单位为毫秒),默认Enabled设为false。
  2. 修改代码如下:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyData == Keys.C)
    {
        // 启动定时器,开始持续点击
        clickTimer.Enabled = true;
    }
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyData == Keys.C)
    {
        // 停止定时器,结束点击
        clickTimer.Enabled = false;
    }
}

private void clickTimer_Tick(object sender, EventArgs e)
{
    // 定时器每触发一次,执行一次点击逻辑
    Click();
}

额外注意事项

  • 确保窗体的KeyPreview属性设为true,否则当焦点在其他控件上时,窗体可能捕获不到按键事件。
  • 如果你的Click()方法是模拟系统全局点击(比如调用SendInput),不需要额外处理线程问题;如果涉及操作UI控件,Timer的Tick事件本身就在UI线程触发,天然线程安全。

内容的提问来源于stack exchange,提问作者Harabe Kowalski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:45:41