2

私は2つの機能を持っています - 1つはループ内のシリアルポートでいくつかのコマンドを実行し、もう1つは最初のメソッドでループの実行を停止するイベントハンドラーです。ここにいくつかのサンプルコードがあります。

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

どうすればこれができるかわかりません。

4

2 に答える 2

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;
}
于 2013-01-09T01:15:51.100 に答える
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.
    }
}
于 2013-01-09T01:12:37.990 に答える