萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Windows 8 使用技巧

Windows 8 應用開發:非同步呼叫(Async/Await)實戰範例——從 Windows Blog 抓取文章列表

桌面或 Web 應用常遇耗時操作,為避免 UI 凍結,必須採用非同步程式設計。本文以 Windows 8 應用(C#/XAML)為例,示範 async/await 非同步呼叫模式。

範例架構

  • UI:StackPanel 包含「Get Blogs」按鈕(觸發非同步抓取)、「Change Text」按鈕(驗證 UI 仍可互動)、ListView 顯示部落格列表、TextBlock 顯示狀態文字。
  • 資料模型:BlogItem(作者、發布日期、標題)。

核心程式碼

private async void getBlogs_Click(object sender, RoutedEventArgs e) {
    waitingText.Text = "Loading Blogs...";
    SyndicationClient client = new SyndicationClient();
    client.BypassCacheOnRetrieve = true;
    Uri feedUri = new Uri("https://windowsteamblog.com/blogs/windows/b/developers/atom.aspx");
    try {
        SyndicationFeed feed = await client.RetrieveFeedAsync(feedUri);
        ObservableCollection<BlogItem> blogData = new ObservableCollection<BlogItem>();
        listTitle.Text = feed.Title.Text;
        foreach (SyndicationItem item in feed.Items) {
            blogData.Add(new BlogItem() {
                Author = item.Authors[0].Name.ToString(),
                PubDate = item.PublishedDate.Year + "/" + item.PublishedDate.Month + "/" + item.PublishedDate.Day,
                Title = item.Title.Text
            });
        }
        blogList.ItemsSource = blogData;
        waitingText.Text = "Completed!";
    } catch (Exception ex) {
        waitingText.Text = "Can't load the page: " + ex.ToString();
    }
}

關鍵點:

  1. 方法簽名加 async 關鍵字。
  2. 呼叫非同步 API RetrieveFeedAsync 時加 await,編譯器自動生成狀態機,釋放 UI 執行緒。
  3. 非同步期間 UI 完全可用,可點擊「Change Text」修改文字驗證。

執行演示

  1. 點擊「Get Blogs」→ 狀態顯示「Loading Blogs...」,非同步作業啟動。
  2. 此時點擊「Change Text」→ 文字變為「Please Waiting...」,證明 UI 未阻塞。
  3. 資料載入完成 → 列表顯示部落格文章,狀態更新為「Completed!」。

點擊 Get Blogs 後顯示 Loading Blogs...

非同步期間點擊 Change Text,文字變更,UI 正常回應

非同步完成,顯示 Completed! 與部落格列表

完整執行畫面

此為非同步程式設計基礎範例,Windows Runtime 提供大量 Async 後綴 API(檔案 IO、網路、感應器等),同樣適用 await 模式。支援 C#、VB、JavaScript 多語言開發。

copyright © 萬盛學電腦網 all rights reserved