使用长 for 循环时程序不响应

Program don't respond when using a long for loop

我有一个按钮点击循环,用于检查站点是否可用,并将站点列表放入数组中,并使用 for 循环逐个检查它们,如果它们可用,则将文本添加到一个文本框,但是当我的列表变长时,程序没有响应,大约 10 秒后,所有结果都将一起写入该文本框,而不是一个一个地写入,即使列表不长并且处理得很好,我也无法使用程序进行任何操作,例如移动有办法解决吗?

那是因为你的 CPU 重循环是在 GUI 线程上完成的,这意味着它不能再更新屏幕,这导致 Windows 认为它停止响应,而实际上它只是在做一个一堆工作,没有时间更新它的屏幕。

使用 BackgroundWorker 通过 运行 另一个线程中的循环来完成此操作:https://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx。 将循环代码移动到 BackgroundWorker.

DoWork

最简单的方法是使用 async/await

async private void button1_Click2(object sender, EventArgs e)
{
    foreach (var url in sites)
    {
        bool available = await Task.Run(() =>
          {
              //Do your work here
              return true; //or false; 
          });

        //Update UI here
    }
}

更多信息:https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx and https://msdn.microsoft.com/en-us/library/hh191443.aspx