Windows 8 應用開發 – 非同步呼叫

來源:互聯網
上載者:User

    不論是案頭用戶端還是Web應用通常會出現處理時間較長的操作,為了在這段時間內不影響使用者與應用之間的互動體驗,開發人員通常會使用非同步呼叫技術,使得比較複雜的邏輯操作由非同步進行,使用者仍然可以繼續使用應用,不會有無響應的等待情況出現。

     本篇將通過一個簡單的執行個體示範如何在Windows 8 應用中使用非同步編程。首先我們來編寫一個“Get Blogs”按鈕,點擊它可以從Windows Blog中擷取部落格列表。當然擷取部落格資訊的過程是由非同步進行的,這個過程中為了測試使用者仍然可以與應用互動,我們再設計一個“Change Text”用來修改waitingText的內容。

代碼
<StackPanel Orientation="Horizontal" Grid.Row="1">    <StackPanel>        <TextBlock x:Name="listTitle" Height="40" Width="200"                    Style="{StaticResource BasicTextStyle}"/>        <ListView x:Name="blogList" ItemTemplate="{StaticResource listTemplate}"                  VerticalAlignment="Top" HorizontalAlignment="Left" Height="550"                  Margin="50,10,0,0" Width="650"/>    </StackPanel>    <StackPanel Orientation="Vertical" VerticalAlignment="Top">        <TextBlock x:Name="waitingText" Height="40" Width="200"                    Style="{StaticResource BasicTextStyle}" />        <Button x:Name="getBlogs" Content="Get Blogs" Width="150"                Click="getBlogs_Click"  />        <Button x:Name="changeText" Content="Change Text" Margin="0,10,0,0"                 Width="150" Click="changeText_Click" />    </StackPanel></StackPanel>

     接下來為“Get Blogs”按鈕添加Click事件,getBlogs_Click與以往Click事件不同之處就在於多了一個async關鍵字,看到Async就說明下面的內容要通過非同步方法呼叫來實現。方法中通過SyndicationClient.RetrieveFeedAsync擷取部落格內容,並通過await操作符告知應用要調用非同步作業,且不影響使用者正常互動。如果不使用的非同步呼叫的話,使用者只能等待所有部落格內容載入完成後,才能繼續使用該應用。

private async void getBlogs_Click(object sender, RoutedEventArgs e){    waitingText.Text = "Loading Blogs...";    SyndicationClient client = new SyndicationClient();    client.BypassCacheOnRetrieve = true;    Uri feedUri = new Uri("http://blogs.windows.com/windows/b/bloggingwindows/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.ToString() + "/" +                          item.PublishedDate.Month.ToString() + "/" +                          item.PublishedDate.Day.ToString(),                Title = item.Title.Text            });        }        blogList.ItemsSource = blogData;                waitingText.Text = "Completed!";    }    catch (Exception ex)    {        waitingText.Text = "Can't load the page:" + ex.ToString();    }}
示範

     運行程式點擊“Get Blogs”按鈕,現在應用已經通過非同步方式擷取Blog內容,這是我們可以點擊“Change Text”來驗證一下使用者是否可以繼續使用應該的其他功能。

點擊“Get Blogs”後會出現“Loading Blogs…”的字樣,說明此事非同步呼叫已經啟動。

在擷取到部落格內容前點擊“Change Text”,剛才的文字會變為“Please Waiting…”,說明當非同步呼叫時使用者仍然可以與應用進行互動。

非同步呼叫完成後,文字部分又被更新為“Completed!”。

     至此,關於非同步呼叫的開發就完成了。本篇內容只是非同步呼叫的一種類型,當然還有許多其他類型的API可以供大家使用,而且包含C#、VB、JS多種語言開發。

源碼

http://sdrv.ms/XCAv6K

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.