验证大量URL并将结果添加到ListBox冻结UI

时间:2018-01-22 17:42:12

标签: c# .net multithreading listbox system.net

我正在验证一组网址。当URL计数达到30,000时,程序的性能会下降。

Parallel.ForEach(urilist, line =>
{
    if (!IsHttpStatusOk(line.ToString()))
    {
        listBox1.Items.Add(line.ToString());
    }
});

public static bool IsHttpStatusOk(string url)
{
    try
    {

        var request = WebRequest.Create(finalurl) as HttpWebRequest;
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36";
        request.AllowAutoRedirect = false;
        using (var response = request.GetResponse())
            return (response as HttpWebResponse).StatusCode == HttpStatusCode.OK;
    }
    catch (Exception)
    {
        return false;
    }
}

我需要向用户显示无效网址,为此我使用ListBox。这在一定程度上正常工作,直到无效URL数量超过某个限制。用户界面冻结,CPU使用率高峰和程序变得无响应。

我该如何解决这个问题?该问题也存在于DataGridView,并且会出现较少数量的网址。

0 个答案:

没有答案