簡體   English   中英

從Internet異步收集信息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM