我有一个循环运行的程序。就是这个
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
答案 0 :(得分:3)
当主线程忙于在循环中执行某些工作时,您不能指望用户界面正常工作。使用BackgroundWorker
对象在其中激活所需的循环 - 它会在其他线程上自动调用,并且从主线程中您可以轻松发送消息以停止其工作。
您需要将方法分配到BackgroundWorker
的{{1}}事件,然后从表单中调用DoWork
。然后通过调用myBackgroundWorker.RunWorkerAsync()
,您将其myBackgroundWorker.CancelAsync()
属性更改为true,您可以不断检查循环以中断执行。
请参阅here。