异步从Internet收集信息

时间:2009-08-21 08:58:05

标签: c# asynchronous

我有一个WPF应用程序,它提供了一个项目列表。如果Web服务器上存在给定项目的某些信息,我想在UI中显示一个图标(我需要下载HTML网页并验证其内容以决定是否应该显示图标)。

项目数量可能非常大(超过100个),因此同步请求Web服务器可能会冻结应用程序较长时间。我想异步地执行它并在检索每条信息后更新UI。处理这个问题的最佳方法是什么。

2 个答案:

答案 0 :(得分:0)

使用Backgroundworkers是解决问题的好方法 它易于使用: 您运行asyn操作而不冻结您的应用程序,并在操作asyn完成时通知您。

这里有一些例子: http://msdn.microsoft.com/en-us/magazine/cc163328.aspx http://channel9.msdn.com/forums/TechOff/252416-C-and-WPF-progressbar/

BW的MSDN定义: http://msdn.microsoft.com/en-us/library/8xs8549b.aspx

希望这有帮助。

答案 1 :(得分:0)

使用BackgroundWorker进行工作。更新ProgressChanged事件处理程序

中的UI
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    WebClient wc = new WebClient();
    int count = urlsToCheck.Count;
    for(int i = 0; i < count; i++)
    {
        bool urlValid = CheckUrl(url);
        backgroundWorker1.ReportProgress(100 * (i + 1) / count, new CheckUrlResult(url, urlValid));
    }
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    CheckUrlResult result = e.UserState as CheckUrlResult;
    textBox1.Text += string.Format("{0} : {1}\n", result.Url, result.IsValid);
    progressBar1.Value = e.ProgressPercentage;
}