我有两个函数 - 一个是在循环内的串口上运行一些命令,另一个是应该在第一个方法中停止执行循环的事件处理程序。这是一些示例代码。
public void btm_Processing_Click(object sender, EventArgs e)
{
for (int i = 1; i <= x ; i++)
{
// My processing commands are here .
}
}
这是我的停止按钮事件处理程序。
private void btm_Stop_Click(object sender, EventArgs e)
{
var dialogResult = MessageBox.Show("Do you want to stop processing?",
"Error",
MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
// Here is where I want to break that loop.
}
else
{
// Do other things.
}
}
我不知道如何做到这一点。
答案 0 :(得分:4)
执行此操作的最佳方法是使用BackgroundWorker线程执行循环,然后稍后可以从主线程中取消它。
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
更简单的方法是创建一个你设置的全局变量
private volatile bool isWorking = false;
public void btm_Processing_Click(object sender, EventArgs e)
{
isWorking = true;
for (int i = 1; i <= x ; i++)
{
//My Processing Commands are Here
if(!isWorking)
break;
}
}
private void btm_Stop_Click(object sender, EventArgs e)
{
DialogResult dialogResult = MessageBox.Show("Do You Want To Stop Processing ? ", "Error", MessageBoxButtons.YesNo);
isWorking = dialogResult != DialogResult.Yes;
}
答案 1 :(得分:2)
设置中断变量;
private volatile bool shouldStop = false;
private void btm_Processing_Click(object sender, EventArgs e)
{
for (int i = 1; i <= x ; i++)
{
//My Processing Commands are Here
if (shouldStop)
{
shouldStop=false;
break;
}
}
}
private void btm_Stop_Click(object sender, EventArgs e)
{
var dialogResult = MessageBox.Show("Do you want to stop processing?",
"Error",
MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
shouldStop = true;
}
else
{
// Do other things.
}
}