1

这是我的代码,但是在 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;
    }
4

2 回答 2

2

stop永远不会在您的代码中重置为 false。每次button1单击时使用新的 CancellationToken 可能会更好:

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();
}
于 2019-11-04T09:35:32.030 回答
1

您的代码中的问题是stop无法重置为false.

stop = false;退出循环(它什么都不做)并将它放在循环之外的任何地方button1_Click

于 2019-11-04T09:28:09.980 回答