在表单中停止运行循环

时间:2014-02-28 10:20:38

标签: c#

我有一个循环运行的程序。就是这个

private void ReadCamAuto_Click(object sender, EventArgs e)
{
    this.serialPort1.DataReceived -= new System.IO.Ports.SerialDataReceivedEventHandler(this.DataReceivedHandler);
    RunReadCamAuto = true;
    while (RunReadCamAuto)
    {
        serialPort1.WriteLine("2,2,2,2");
        CreatePic(4, 4);
    }
    this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.DataReceivedHandler);
}

但问题是我在While循环中我无法按下程序中的任何其他按钮,因此无法停止。我不知道如何阻止它?

我尝试按下将RunReadCamAuto设置为false和Console.ReadKey()

的按钮

我正在使用:

  • c#Form App

  • MS VS 2010

1 个答案:

答案 0 :(得分:3)

当主线程忙于在循环中执行某些工作时,您不能指望用户界面正常工作。使用BackgroundWorker对象在其中激活所需的循环 - 它会在其他线程上自动调用,并且从主线程中您可以轻松发送消息以停止其工作。

您需要将方法分配到BackgroundWorker的{​​{1}}事件,然后从表单中调用DoWork。然后通过调用myBackgroundWorker.RunWorkerAsync(),您将其myBackgroundWorker.CancelAsync()属性更改为true,您可以不断检查循环以中断执行。

请参阅here