Как завершить и перезапустить, используя foreach - PullRequest
1 голос
/ 04 ноября 2019

Вот мой код, но после stop = true, еще раз stop = false и не будет повторно циркулировать

    bool stop = false;
    private void button1_Click(object sender, EventArgs e)
    {
        string filename = @"temp1.txt";
        int n = 5;
        foreach (var line in File.ReadLines(filename).AsParallel().WithDegreeOfParallelism(n))
        {
            textBox1.Text = line;

            if (stop == true)
            {
                break;
            }
            stop = false;
        }
    }

    private void button4_Click(object sender, EventArgs e)
    {
        stop = true;
    }

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

stop никогда не сбрасывается в ложь в вашем коде. Вам может быть лучше использовать новый CancellationToken каждый раз при нажатии button1:

private CancellationTokenSource cancellationTokenSource;

private void button1_Click(object sender, EventArgs e)
{
    // create a new CancellationTokenSource and Token for this event
    cancellationTokenSource = new CancellationTokenSource();
    var cancellationToken = cancellationTokenSource.Token;

    string filename = @"temp1.txt";
    int n = 5;
    foreach (var line in File.ReadLines(filename).AsParallel().WithDegreeOfParallelism(n))
    {
        textBox1.Text = line;

        // Check if token has had a requested cancellation.
        if (cancellationToken.IsCancellationRequested)
            break;
    }
}

private void button4_Click(object sender, EventArgs e)
{
    if (cancellationTokenSource != null)
        cancellationTokenSource.Cancel();
}
1 голос
/ 04 ноября 2019

Проблема в вашем коде заключается в том, что stop не может быть сброшен на false.

Вынимайте stop = false; из цикла (где он ничего не делает) и выводите его куда-либо за пределыпетля в button1_Click.

...