Click here to Skip to main content
15,893,722 members
Articles / Desktop Programming / Windows Forms

Simple Asynchronous Background Task Processing with Progress Dialog (Silverlight Solution)

Rate me:
Please Sign up or sign in to vote.
4.91/5 (15 votes)
21 Apr 2010CPOL8 min read 49.4K   1.1K   46  
Small, generic, reusable infrastructure for running tasks asynchronously and displaying progress information.
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace AsyncOperation
{
    public class AsyncController
    {
        //These use Custom Tasks..
        public static void Queue(TaskBase task)
        {
            Queue(task, null, false);
        }

        public static void Queue(TaskBase task, Action<TaskBase> completionCallback)
        {
            Queue(task, completionCallback, false);
        }

        public static void Queue(TaskBase task, Action<TaskBase> completionCallback, bool wait)
        {
            //assign callback to task
            task.CompletionCallback = completionCallback;

            if (wait)
            {
                if (Deployment.Current.Dispatcher.CheckAccess())
                    throw new Exception("Wait can only be used when running on worker thread, as UI thread cannot be blocked.");

            }

            task.Start();

            if (wait)
                task.Wait();
        }


        //These use the shipped DelegateTask
        public static void Queue<TP>(Action<TP> taskRun) where TP : DefaultProgressDlg, new()
        {
            Queue<TP>(taskRun, false);
        }

        public static void Queue<TP>(Action<TP> taskRun, bool isCancellable) where TP : DefaultProgressDlg, new()
        {
            DelegateTask<TP> task = new DelegateTask<TP>(taskRun, isCancellable);

            task.Start();
        }

        //more to come...


    }
}

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
Software Developer (Senior)
Ireland Ireland
.NET Developer.

Comments and Discussions