2014-02-28 113 views
0

我有一个循环运行的程序。正是这种在表单中停止运行循环结束操作

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#窗体应用程序

  • MS VS 2010

+0

Application.ProcessMessages? – Rob

+0

可能的重复[如何在按钮单击时启动循环,然后在同一按钮再次单击时停止](http://stackoverflow.com/questions/20249318/how-to-start-a-loop-upon-button-然后再次单击按钮再次点击) –

+0

读取线程上的串行端口? – AnthonyLambert

回答

3

你不能指望用户界面工作,而主要线程忙于在循环中做一些工作。使用BackgroundWorker对象来触发其中所需的循环 - 它会在其他线程中自动调用,并且可以从主线程中轻松发送消息来停止其工作。

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

请参阅here