![](/img/trans.png)
[英]Retrieve information from a REST service asynchronously while throttling the number of requests
[英]Harvesting information from the Internet asynchronously
我有一個WPF應用程序,其中顯示了項目列表。 如果某個給定項目的Web服務器上存在某些信息,我想在UI中顯示一個圖標(我需要下載HTML網頁並驗證其內容,以確定是否應該顯示該圖標)。
項目數量可能非常大(超過100個),因此同步請求Web服務器可能會使應用程序凍結更長的時間。 我想異步執行此操作,並在檢索每條信息后更新UI。 解決此問題的最佳方法是什么。
使用Backgroundworkers是解決問題的好方法。它很容易使用:您可以運行ayn操作而不凍結應用程序,並且在完成asyn操作時會收到通知。
此處的一些示例: http : //msdn.microsoft.com/zh-cn/magazine/cc163328.aspx http://channel9.msdn.com/forums/TechOff/252416-C-and-WPF-progressbar/
BW的MSDN定義: http : //msdn.microsoft.com/zh-cn/library/8xs8549b.aspx
希望有幫助。
使用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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.