Asynchronous Programming in Windows Store App

Introduction

To work with Asynchronous programming we use the await keyword, and also the "Async" keyword. We call the asynchronous APIs in response to a user's action, such as when the user presses the button etc. In this article I explain how to perform asynchronous programming.

In this article I use an example in which, when I click on the button, it fetches the RSS Feed using the syndication class. This feed includes all the latest articles and their published date of any website; in this example I fetch the RSS feed from the http://www.dotnetheaven.com/ site. The asynchronous method SyndicationClient.RetrieveFeedAsync is used to fetch or download the feed.

To work with it use the following steps.

Step 1

First open Visual Studio 2012 RC in Windows 8. Then click File -> New -> Project. Then select Window Store from Visual C#, and select a blank page in the center tab then give the name of the application and then click ok.

Step 2

Add XAML code to MainPage.xaml as in the following:

<Page

    x:Class="acron.MainPage"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:local="using:acron"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    mc:Ignorable="d">

    <Grid>

        <Grid.Background>

            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

                <GradientStop Color="Black"/>

                <GradientStop Color="#FFD2D710" Offset="1"/>

            </LinearGradientBrush>

        </Grid.Background>

        <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Height="96" Width="983" Orientation="Horizontal">

            <Button  Margin="50,50,0,0" Height="50" Width="100"  HorizontalAlignment="Left" VerticalAlignment="Top" Content="Load Titles" Click="Button_Click_1"></Button>

            <TextBlock  Margin="50,50,0,0" Text=" Latest Articles Titles and Their Publish Date of DotNetHeaven.com" HorizontalAlignment="Left" VerticalAlignment="Top" Height="50" Width="750" FontSize="25"></TextBlock>           

        </StackPanel>

        <StackPanel Orientation="Horizontal">

            <ListView x:Name="listitems" HorizontalAlignment="Left" Margin="150,150,0,0" ItemsSource="{Binding}" SelectionChanged="listitems_SelectionChanged_1" Width="500">

                <ListView.Background>

                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

                        <GradientStop Color="Black"/>

                        <GradientStop Color="#FFA3ECF3" Offset="1"/>

                    </LinearGradientBrush>

                </ListView.Background>

                <ListView.ItemTemplate>

                    <DataTemplate>

                        <StackPanel>

                            <TextBlock Text="{Binding Title}" FontSize="20" ></TextBlock>

                            <TextBlock Text="{Binding Date}" FontSize="10"></TextBlock>

                        </StackPanel>

                    </DataTemplate>

                </ListView.ItemTemplate>

            </ListView>

            <WebView x:Name="web" Visibility="Collapsed" Width="1000" Margin="150,150,0,0"></WebView>           

        </StackPanel>

    </Grid>

</Page>

Step 3

 

Right-click on the project in the Solution Explorer to add a class and choose the class from the window that appears and give a name for the class as you want and then click ok.

Step 4

Add the following code in this class:
 

namespace acron

{

    public class feeddata

    {

     private List<items> items1=new List<items>();

        public List<items> items

        {

            get{

                return this.items1;

            }

        }

    }

    public class items

    {

        public string Title

        {

            get;

            set;

        }

        public DateTime Date

        {

            get;

            set;

        }

        public Uri link

        {

            get;

            set;

        }

    }

}

 

Step 5

Now add the following namespace in the MainPage.xaml.cs file:
 

using Windows.Web.Syndication;

 

Step 6

Now write the following code in the MainPage.xaml.cs file:

namespace acron

{

    public sealed partial class MainPage : Page

    {

        SyndicationFeed feed = new SyndicationFeed();

        public MainPage()

        {

            this.InitializeComponent();

        }

        private void listitems_SelectionChanged_1(object sender, SelectionChangedEventArgs e)

        {

            items I = new items();

            I.link = feed.Items[listitems.SelectedIndex].Links[0].Uri;

            web.Navigate(I.link);

            web.Visibility = Visibility.Visible;

        }

        private async void Button_Click_1(object sender, RoutedEventArgs e)

        {

            SyndicationClient client = new SyndicationClient();

            client.BypassCacheOnRetrieve = true;

            Uri feedUri = new Uri("http://www.dotnetheaven.com/rss/latestarticles.aspx");

            feed = await client.RetrieveFeedAsync(feedUri);

            feeddata feeddata = new feeddata();

            items feeditem = null;

            foreach (SyndicationItem item in feed.Items)

            {

                feeditem = new items();

                feeditem.Title = item.Title.Text;

                feeditem.Date = item.PublishedDate.DateTime;

                feeditem.link = new Uri("http://www.dotnetheaven.com");

                feeddata.items.Add(feeditem);

            }

 

            listitems.DataContext = feeddata.items;

        }

    }

}

Step 7

Now Press F5 to run the application. The Screen is displayed with the load button and a simple message. When I click on the button, all the latest feed URLs will be fetched from the site and displayed in the listbox as in:
Load-Latest-Article-Rss-Feed-Using-Asynchronous-Prograaming-In-Windows-8-Apps.jpg

When I click any of these links the specified article will be opened in the Web View as:

Working-In-RSS-Feed-In-Windows-8-Apps.jpg

Summary

In this article I explained how to use the await keyword to perform asynchronous programming.