按下 mousedown 按钮时 C# 循环

标签 c# winforms mouseevent

我想在按下鼠标左键时使用循环:

  private void Loop_MouseDown(object sender, MouseEventArgs e)
        {
            while (e.Button==MouseButtons.Left)
            {
            //Loop
            }
        }

我无法使用此线程中的解决方案:
C# how to loop while mouse button is held down 因为我是通过 RS232 数据发送的,并且使用定时器和它自己的时间间隔不起作用。此外,该主题的任何解决方案都不适合我。 它也不能像这里一样工作:

 if (e.Button == MouseButtons.Left)
    {
        //loop
    }

此解决方案也不起作用:

bool isLooping = false;

//on mouse down
private void myControl_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) {
    isLooping = true;
    runLoop();
}

//on mouse up event
private void myControl_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) {
    isLooping = false;
}

//This is the main loop you care about.  Put this in your application
//This should go in its own thread
void runLoop() {
    while (isLooping) {
        //do stuff
    }
}

因为调用 runLoop 会阻塞线程,所以 MouseUp 事件永远不会触发。

那么如何让它正常工作呢?

最佳答案

使用 BackGroundWorker。非常适合您的问题。

将循环函数放入 worker 并根据鼠标事件启动/停止 worker。

关于按下 mousedown 按钮时 C# 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7712309/

相关文章:

c# - 将 C++ Builder 代码转换为 C# .NET(TComponent、TOjbect、TList 等)

c# - JSON使用函数参数序列化一个对象

c# - 实现极其简单的服务器的最简单方法? (C#)

c# - Windows 窗体 : change dataGridView's first cell origin?

c# - ToolTip 的 BackColor 在不使用任何 BackColor 属性的情况下因两个不同的样本而异

winforms - 我应该只使用 1 个数据库吗?

c# - 是否可以在空数据网格中显示消息

python 列出鼠标点击坐标

javascript - 使用正交相机将鼠标点击转换为 3D 空间

javascript - 检测鼠标方向