C# 在另一个函数中打破其他函数循环

标签 c# function for-loop serial-port

我有两个函数 - 一个是在我的串行端口上循环运行一些命令,另一个是一个事件处理程序,它应该在第一个方法中停止循环的执行。这是一些示例代码。

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.                           
    }
}

我不确定我该怎么做。

最佳答案

最好的方法是使用一个 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;
}

关于C# 在另一个函数中打破其他函数循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14226787/

相关文章:

c# - .net core 5 AddHeaderPropogation不转发RequestHeaders

c# - SQL Server 2000 - 以编程方式限制对数据库所有者的访问?

c# - 如何从代码隐藏运行存储过程(带参数 - 有返回值)?

for-loop - for-range 构造与 Go 中的闭包有何关系?

ios - 仅当条件匹配时才增加 for 循环的计数

c# - 删除后面代码中的 css 类

javascript - 以字符串数组形式返回两个日期之间的月数

python - 列表子集的函数列表

Python:函数执行后不保存变量的值

for-loop - 索引隐式时 `for ... range`的迭代顺序