我有一个WPF应用程序,它提供了一个项目列表。如果Web服务器上存在给定项目的某些信息,我想在UI中显示一个图标(我需要下载HTML网页并验证其内容以决定是否应该显示图标)。
项目数量可能非常大(超过100个),因此同步请求Web服务器可能会冻结应用程序较长时间。我想异步地执行它并在检索每条信息后更新UI。处理这个问题的最佳方法是什么。
答案 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
事件处理程序
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;
}