如何使用按钮停止长时间运行的循环

Aam*_*mir -3 c# winforms

我有具有 2 个按钮的 c# 应用程序。首先有运行 10k 次的 for 循环。每个循环代码执行需要 1 秒才能完成。

    for(int i=0;i<10000;i++){
      //My running code take 1 sec for each loop
    }
Run Code Online (Sandbox Code Playgroud)

有时我想通过单击另一个按钮“停止”来停止此循环/执行,但它不起作用。请建议我什么解决方案。

voy*_*tek 5

UI Thread(处理所有 UI 事件的线程 - 例如按钮单击)中运行长时间运行的操作不是一个好习惯。你应该在另一个循环中运行你的循环。

您可以使用Task Parallel Library (TPL)

    private bool stopIt = false;

    private void Form1_Load(object sender, EventArgs e)
    {
        Task task = Task.Factory.StartNew(() =>
            {
                for (int i = 0; i < 1000000000; i++)
                {
                    if (!stopIt)
                    {
                        Console.WriteLine("Here is " + i);
                    }
                    else
                    {
                        break;
                    }
                }
            });
    }

    private void button1_Click(object sender, EventArgs e)
    {
        stopIt = true;
    }
Run Code Online (Sandbox Code Playgroud)