Click here to Skip to main content
15,886,519 members
Articles / Desktop Programming / WPF

A Simple Computation API with Progress Tracking

Rate me:
Please Sign up or sign in to vote.
4.83/5 (20 votes)
25 Apr 2011CPOL8 min read 42.5K   1.5K   47  
A computation wrapper with built-in progress tracking using Reactive Extensions for .NET (and AsyncCTP).
<Window x:Class="SimpleComputation.WpfDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:SimpleComputation.WpfDemo"
        Title="SimpleComputation Demo" Height="360" Width="545" ResizeMode="NoResize">
    <Grid>
        <Grid.DataContext>
            <local:MainViewModel />
        </Grid.DataContext>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition />
        </Grid.RowDefinitions>

        <StackPanel Margin="6 6 6 0" Orientation="Horizontal">
            <Button Content="Simple Computation" Command="{Binding Commands[RunSimpleComputation], Mode=OneTime}" />
            <Button Content="Exception Throwing Computation" Command="{Binding Commands[RunExceptionComputation], Mode=OneTime}" Margin="5 0 0 0" />
            <Button Content="Mixed Progress Computation" Command="{Binding Commands[RunProgressComputation], Mode=OneTime}" Margin="5 0 0 0" />
        </StackPanel>

        <StackPanel Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="25 15" >
            <TextBlock Text="{Binding Returned, Mode=OneWay}" HorizontalAlignment="Center"  Margin="0 0 0 10"/>            
            <StackPanel DataContext="{Binding CurrentComputation.Progress, Mode=OneWay}" >
                <TextBlock Text="{Binding StatusText, Mode=OneWay}" />
                <ProgressBar Height="25" 
                                 IsIndeterminate="{Binding IsIndeterminate, Mode=OneWay}"
                                 Minimum="0"
                                 Maximum="{Binding Length, Mode=OneWay}"
                                 Value="{Binding Current, Mode=OneWay}" />
            </StackPanel>
            <Button Content="Cancel Computation" Command="{Binding Commands[Cancel], Mode=OneTime}" HorizontalAlignment="Right" Margin="0 5 0 0" />
        </StackPanel>

        <ListBox Grid.Row="2" ItemsSource="{Binding ComputationProgressLog, Mode=OneWay}" Margin="6 0 6 6">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding StatusText, Mode=OneTime}" Margin="0 0 5 0" />
                        <TextBlock><Run Text="{Binding Current, Mode=OneTime}" /><Run Text="/" /><Run Text="{Binding Length, Mode=OneTime}" />
                        <Run Text=" indeterminate: " /><Run Text="{Binding IsIndeterminate, Mode=OneTime}" /></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Student
Czech Republic Czech Republic
I have a master's degree in computer science and currently I am a PhD student. My main research interest is in computational chemistry (sort of), although I am more interested in the computational than the chemical aspects of the field.

Comments and Discussions