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

  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。非常适合您的问题。

将循环功能放入工作程序中,并在发生鼠标事件时启动/停止工作程序。

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

10-13 06:16