Click here to Skip to main content
15,896,040 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.7K   1.5K   47  
A computation wrapper with built-in progress tracking using Reactive Extensions for .NET (and AsyncCTP).
<?xml version="1.0"?>
<doc>
    <assembly>
        <name>SimpleComputation.Silverlight</name>
    </assembly>
    <members>
        <member name="T:SimpleComputation.ComputationEx">
            <summary>
            Extension methods for computations.
            </summary>
        </member>
        <member name="M:SimpleComputation.ComputationEx.AsComputation``1(System.Func{``0})">
            <summary>
            Wraps the function into RelayComputation.
            </summary>
            <typeparam name="TResult"></typeparam>
            <param name="function"></param>
            <returns></returns>
        </member>
        <member name="M:SimpleComputation.ComputationEx.AsComputation``1(System.Func{SimpleComputation.ComputationProgress,``0})">
            <summary>
            Wraps the function into RelayComputation.
            </summary>
            <typeparam name="TResult"></typeparam>
            <param name="function"></param>
            <returns></returns>
        </member>
        <member name="M:SimpleComputation.ComputationEx.AsComputation(System.Action)">
            <summary>
            Wraps the action into RelayComputation.
            </summary>
            <param name="action"></param>
            <returns></returns>
        </member>
        <member name="M:SimpleComputation.ComputationEx.AsComputation(System.Action{SimpleComputation.ComputationProgress})">
            <summary>
            Wraps the action into RelayComputation.
            </summary>
            <param name="action"></param>
            <returns></returns>
        </member>
        <member name="T:SimpleComputation.RelayComputation">
            <summary>
            Represents a computation that invokes a single action.
            </summary>
        </member>
        <member name="T:SimpleComputation.Computation">
            <summary>
            Represent a computation with no result (represented by System.Unit :)).
            Also contains static functions to create (relay) computations.
            </summary>
        </member>
        <member name="T:SimpleComputation.Computation`1">
            <summary>
            An abstract class representing a computation with progress tracking, exception handling and the sorts.
            Also, Fluent(TM).
            </summary>
            <typeparam name="TResult">Type of the result.</typeparam>
        </member>
        <member name="T:SimpleComputation.IComputation`2">
            <summary>
            Interface for computation encapsulation.
            </summary>
            <typeparam name="TResult">Result of the computation.</typeparam>
            <typeparam name="TProgress">Type of computation's progress report.</typeparam>
        </member>
        <member name="T:SimpleComputation.IComputationBase">
            <summary>
            Computation base to support "anonymous" observing and cancellation.
            </summary>
        </member>
        <member name="M:SimpleComputation.IComputationBase.Cancel">
            <summary>
            Cancels the task. default(TResult) is returned.
            </summary>
        </member>
        <member name="P:SimpleComputation.IComputationBase.Progress">
            <summary>
            Current computation's progress.
            </summary>
        </member>
        <member name="M:SimpleComputation.IComputation`2.RunAsync(System.Action{`0},System.Action,System.Action{System.Exception})">
            <summary>
            Creates a task representing a future result. This is pretty much equivalent to the TaskEx.Run function.
            </summary>
            <exception cref="T:System.InvalidOperationException">This is thrown if RunAsync is called more than once.</exception>
            <returns>Task representing a result.</returns>       
        </member>
        <member name="M:SimpleComputation.IComputation`2.RunSynchronously">
            <summary>
            Runs the computation synchronously.
            </summary>
            <exception cref="T:System.InvalidOperationException">This is thrown if RunSynchronously is called more than once.</exception>
            <returns>Result of the computation</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.OnRun">
            <summary>
            Function to be overridden by child types...
            </summary>
            <returns></returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.RunAsync(System.Action{`0},System.Action,System.Action{System.Exception})">
            <summary>
            Runs the computation asynchronously.
            </summary>
            <exception cref="T:System.InvalidOperationException">This is thrown if RunAsync is called more than once.</exception>
            <param name="onCompleted"></param>
            <param name="onCancelled"></param>
            <param name="onError"></param>
        </member>
        <member name="M:SimpleComputation.Computation`1.RunAsync">
            <summary>
            Runs the computation asynchronously.
            </summary>
            <exception cref="T:System.InvalidOperationException">This is thrown if RunAsync is called more than once.</exception>
        </member>
        <member name="M:SimpleComputation.Computation`1.RunSynchronously">
            <summary>
            Runs the computation synchronously.
            </summary>
            <exception cref="T:System.InvalidOperationException">This is thrown if RunSynchronously is called more than once.</exception>
            <returns>Result of the computation.</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.Cancel">
            <summary>
            Cancel the computation.
            </summary>
        </member>
        <member name="M:SimpleComputation.Computation`1.ObservedOn(System.Concurrency.IScheduler)">
            <summary>
            Sets the scheduler on which the ObservedBy, ReactsOnCancellationBy, ReactsOnExceptionBy are executed.
            This overrides the previous scheduler set by this function.
            Default value is Scheduler.Dispatcher.
            </summary>
            <param name="scheduler"></param>
            <returns>The same computation object (i.e. return this).</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.ObservedOn(SimpleComputation.ExecuteOn)">
            <summary>
            Pretty much equivalent to ObservedOn(IScheduler), only perhaps more intuitive.
            This overrides the previous scheduler set by this function.
            </summary>
            <param name="on"></param>
            <returns>The same computation object (i.e. return this).</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.ExecutedOn(System.Concurrency.IScheduler)">
            <summary>
            Changes the scheduler on which the computation is executed on.
            This overrides the previous scheduler set by this function.
            Default is Scheduler.ThreadPool.
            This does not affect RunSynchronously.
            </summary>
            <param name="scheduler"></param>
            <returns>The same computation object (i.e. return this).</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.ExecutedOn(SimpleComputation.ExecuteOn)">
            <summary>
            Pretty much equivalent to ExecutedOn(IScheduler), only perhaps more intuitive.
            This overrides the previous scheduler set by this function.
            </summary>
            <param name="on"></param>
            <returns>The same computation object (i.e. return this).</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.WhenProgressUpdated(System.Action{SimpleComputation.ProgressTick})">
            <summary>
            Observes the computation's progress.
            Observed on the scheduler set by ObserveOn function.
            </summary>
            <param name="observer"></param>
            <returns>The same computation object (i.e. return this).</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.WhenCancelled(System.Action)">
            <summary>
            Executes an action if the computation is cancelled.
            Executed by the scheduler set by ObserveOn function.
            </summary>
            <param name="action"></param>
            <returns>The same computation object (i.e. return this).</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.WhenError(System.Action{System.Exception})">
            <summary>
            Executes an action if an exception (other than OperationCancelledException) is executed.
            Executed by the scheduler set by ObserveOn function.
            </summary>
            <param name="action"></param>
            <returns>The same computation object (i.e. return this).</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.WhenCompleted(System.Action{`0})">
            <summary>
            Executes an action when(if) the computation is completed.
            Executed by the scheduler set by ObserveOn function.
            </summary>
            <param name="action"></param>
            <returns>The same computation object (i.e. return this).</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.WhenStarted(System.Action)">
            <summary>
            Executed when the computation starts.
            Executed by the scheduler set by ObserveOn function.
            </summary>
            <param name="action"></param>
            <returns>The same computation object (i.e. return this).</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.WhenFinished(System.Action)">
            <summary>
            Executed after the computation finishes.
            Executed by the scheduler set by ObserveOn function.
            </summary>
            <param name="action"></param>
            <returns>The same computation object (i.e. return this).</returns>
        </member>
        <member name="M:SimpleComputation.Computation`1.#ctor">
            <summary>
            Ctor
            </summary>
        </member>
        <member name="P:SimpleComputation.Computation`1.Progress">
            <summary>
            Progress tracking.
            </summary>
        </member>
        <member name="P:SimpleComputation.Computation`1.IsCancelled">
            <summary>
            To make the life easier when Cancel is called.
            </summary>
        </member>
        <member name="M:SimpleComputation.Computation.Create``1(System.Func{``0})">
            <summary>
            Creates a relay computation. Ignores progress tracking.
            </summary>
            <typeparam name="TResult"></typeparam>
            <param name="function"></param>
            <returns></returns>
        </member>
        <member name="M:SimpleComputation.Computation.Create``1(System.Func{SimpleComputation.ComputationProgress,``0})">
            <summary>
            Creates a relay computation.
            </summary>
            <typeparam name="TResult"></typeparam>
            <param name="function"></param>
            <returns></returns>
        </member>
        <member name="M:SimpleComputation.Computation.Create(System.Action)">
            <summary>
            Creates a relay computation. Ignores progress tracking.
            </summary>
            <param name="action"></param>
            <returns></returns>
        </member>
        <member name="M:SimpleComputation.Computation.Create(System.Action{SimpleComputation.ComputationProgress})">
            <summary>
            Creates a relay computation.
            </summary>
            <param name="action"></param>
            <returns></returns>
        </member>
        <member name="M:SimpleComputation.RelayComputation.OnRun">
            <summary>
            OnRun override. Calls the function.
            </summary>
            <returns></returns>
        </member>
        <member name="M:SimpleComputation.RelayComputation.#ctor(System.Action{SimpleComputation.ComputationProgress})">
            <summary>
            ComputationProgress object is passed to the action.
            </summary>
            <param name="action">Action to be invoked.</param>
        </member>
        <member name="M:SimpleComputation.RelayComputation.#ctor(System.Action)">
            <summary>
            
            </summary>
            <param name="function">Action to be invoked.</param>
        </member>
        <member name="T:SimpleComputation.RelayComputation`1">
            <summary>
            Represents a computation that calls a single function.
            </summary>
            <typeparam name="TResult">Result of the computation</typeparam>
        </member>
        <member name="M:SimpleComputation.RelayComputation`1.OnRun">
            <summary>
            OnRun override. Calls the function.
            </summary>
            <returns></returns>
        </member>
        <member name="M:SimpleComputation.RelayComputation`1.#ctor(System.Func{SimpleComputation.ComputationProgress,`0})">
            <summary>
            ComputationProgress object is passed to the function.
            </summary>
            <param name="function">Function to be computed.</param>
        </member>
        <member name="M:SimpleComputation.RelayComputation`1.#ctor(System.Func{`0})">
            <summary>
            
            </summary>
            <param name="function">Function to be computed.</param>
        </member>
        <member name="T:SimpleComputation.ExecuteOn">
            <summary>
            For convenience (so that the user does not need to use "using System.Concurrency")
            </summary>
        </member>
        <member name="F:SimpleComputation.ExecuteOn.ThreadPool">
            <summary>
            Execute on thread pool.
            </summary>
        </member>
        <member name="F:SimpleComputation.ExecuteOn.NewThread">
            <summary>
            Execute on new thread.
            </summary>
        </member>
        <member name="F:SimpleComputation.ExecuteOn.UI">
            <summary>
            Execute by the current dispatcher (i.e. where the computation object was created)
            </summary>
        </member>
        <member name="F:SimpleComputation.ExecuteOn.CurrentThread">
            <summary>
            Execute on the current thread
            </summary>
        </member>
        <member name="T:SimpleComputation.ComputationProgress">
            <summary>
            Represents a computation progress.
            </summary>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.ThrowIfCancellationRequested">
            <summary>
            Cancellation support.
            </summary>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.UpdateStatus(System.String)">
            <summary>
            Updates the status text of the computation.
            </summary>
            <param name="status">Status text.</param>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.UpdateProgress(System.Int32)">
            <summary>
            Updates the current progress of the computation.        
            If Current is greater than Length, then Current = Length.
            </summary>
            <param name="current">Current computation progress.</param>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.UpdateLength(System.Int32)">
            <summary>
            Updates the length of the computation.
            If the length is non-zero, IsIndetermate is set to false.
            </summary>
            <param name="length"></param>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.UpdateIsIndeterminate(System.Boolean)">
            <summary>
            Determines if the computation can currently track progress.
            </summary>
            <param name="isIndeterminate"></param>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.UpdateProgress(System.Int32,System.Int32)">
            <summary>
            Combines UpdateProgress(current) and UpdateLength(length)
            </summary>
            <param name="current"></param>
            <param name="length"></param>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.UpdateCanCancel(System.Boolean)">
            <summary>
            Determines whether the computation can be cancelled at the given time.
            </summary>
            <param name="canCancel"></param>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.Started">
            <summary>
            Used by the Computation object.
            </summary>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.Finished">
            <summary>
            Used by the Computation object.
            </summary>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.Exception">
            <summary>
            Used by the Computation object.
            </summary>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.Cancelled">
            <summary>
            Used by the Computation object.
            </summary>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.RequestCancel">
            <summary>
            Used by the Computation object.
            </summary>
        </member>
        <member name="M:SimpleComputation.ComputationProgress.#ctor">
            <summary>
            Used by the Computation object.
            </summary>    
        </member>
        <member name="M:SimpleComputation.ComputationProgress.NotifyPropertyChanged(System.String)">
            <summary>
            
            </summary>
            <param name="propertyName"></param>
        </member>
        <member name="P:SimpleComputation.ComputationProgress.StatusText">
            <summary>
            StatusText property.
            </summary>
        </member>
        <member name="P:SimpleComputation.ComputationProgress.Current">
            <summary>
            Current progress property.
            </summary>
        </member>
        <member name="P:SimpleComputation.ComputationProgress.Length">
            <summary>
            Computation length property.
            </summary>
        </member>
        <member name="P:SimpleComputation.ComputationProgress.IsIndeterminate">
            <summary>
            IsIndeterminate property.
            </summary>
        </member>
        <member name="P:SimpleComputation.ComputationProgress.IsComputing">
            <summary>
            IsComputing property.
            </summary>
        </member>
        <member name="P:SimpleComputation.ComputationProgress.CanCancel">
            <summary>
            CanCancel property.
            </summary>
        </member>
        <member name="P:SimpleComputation.ComputationProgress.Status">
            <summary>
            Used by Computation object.
            </summary>
        </member>
        <member name="P:SimpleComputation.ComputationProgress.ObserverScheduler">
            <summary>
            Set by Computation object.
            </summary>
        </member>
        <member name="E:SimpleComputation.ComputationProgress.PropertyChanged">
            <summary>
            
            </summary>
        </member>
        <member name="T:SimpleComputation.ProgressTick">
            <summary>
            Represents a ComputationProgress's tick.
            </summary>
        </member>
        <member name="M:SimpleComputation.ProgressTick.#ctor(System.String,System.Boolean,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Creates an instance of progress tick.
            </summary>
        </member>
        <member name="P:SimpleComputation.ProgressTick.StatusText">
            <summary>
            Status of the computation. For example "Fetching Data..."
            </summary>
        </member>
        <member name="P:SimpleComputation.ProgressTick.IsIndeterminate">
            <summary>
            Determines if the computation can track progress.
            </summary>
        </member>
        <member name="P:SimpleComputation.ProgressTick.Current">
            <summary>
            Current computation progress.
            </summary>
        </member>
        <member name="P:SimpleComputation.ProgressTick.Length">
            <summary>
            Computation length.
            </summary>
        </member>
        <member name="P:SimpleComputation.ProgressTick.CanCancel">
            <summary>
            Can cancel.
            </summary>
        </member>
        <member name="T:SimpleComputation.ComputationCancelledException">
            <summary>
            Used to cancel computations.
            </summary>
        </member>
    </members>
</doc>

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