private void DoTask(Task task)
		{
			RunWorkerCompletedEventArgs resultArgs;
			try
			{
				var args = new DoWorkEventArgs(task.Argument);
				task.Do(task, args);				
				resultArgs = new RunWorkerCompletedEventArgs(args.Result, null, false);
			}
			catch (Exception e)
			{
				resultArgs = new RunWorkerCompletedEventArgs(null, e, false);
			}
            if (task.Completed != null)
			    synchronizationContext.Post(state => task.Completed(task, resultArgs), resultArgs);			
		}