程序在使用long for循环时不响应

时间:2015-07-31 10:48:03

标签: c# loops long-integer

我有一个单击按钮的循环,用于检查网站是否可用,它将网站列表添加到数组中并使用for循环逐个检查它们,如果它们可用,则会向文本框添加文本但是当我的列表变长时,程序没有响应,大约10秒后,所有结果都会一个接一个地写在那个文本框中,即使列表不长并且处理得很好,我也无法解决任何与程序有关的问题。它,无论如何要解决它?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用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).aspxhttps://msdn.microsoft.com/en-us/library/hh191443.aspx

答案 1 :(得分:0)

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

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