/// <summary>
        /// Genera un nuovo evento per notificare il cambiamento di stato della richiesta di elaborazione del task.
        /// </summary>
        /// <param name="state">lo stato relativo alla richiesta di elaborazione</param>
        /// <param name="error">l'eventuale errore verificatosi durante la comunicazione col servizio</param>
        /// <remarks>
        /// Se non si è verificato alcun errore durante la comunicazione col servizio, il parametro corrispondente
        /// va impostato a null. In modo analogo, se i risultati dell'elaborazione di un task non sono disponibili
        /// a causa di un errore o perché l'operazione è stata annullata, il parametro corrispondente dovrà essere
        /// impostato a null.
        /// </remarks>
        private void RaiseTaskExecutionProgress(TaskRequestState state, Exception error)
        {
            TaskExecutionProgressHandler handler = OnTaskExecutionProgress;

            if (handler != null)
            {
                TaskExecutionProgressEventArgs args =
                    new TaskExecutionProgressEventArgs(state, error, m_TaskRequestId);
                OnTaskExecutionProgress(this, args);
            }
        }
        private static void te_OnTaskExecutionProgress(object sender, TaskExecutionProgressEventArgs e)
        {
            string report = string.Empty;

            report += DateTime.Now + ": ";
            report += "[";
            report += string.Format("Stato (task id = {0}): {1}.", e.Id, e.State.ToString());
            /*if (e.Error != null)
            {
                text += "(";
                text += "Errore. " + e.Error.Message;
                text += ")";
            }*/
            report += "]";
            report += Environment.NewLine;

            Console.WriteLine(report);
        }
        /// <summary>
        /// Questo metodo viene invocato per ogni passo della richiesta di elaborazione.
        /// </summary>
        /// <param name="sender">l'oggetto che ha invocato questo metodo</param>
        /// <param name="args">le informazioni aggiuntive sull'evento</param>
        private void TaskExecution_Progress(object sender, TaskExecutionProgressEventArgs args)
        {
            string report = TaskExecutionStateDescriptions.GetStateDescription(args.State) +
                (!string.IsNullOrWhiteSpace(args.Id) ? string.Format(" Task Id = {0}.", args.Id) : string.Empty);

            m_Updater.Update(() =>
            {
                UpdateReportText(report);
            }
            );
        }
 /// <summary>
 /// Genera un nuovo evento per notificare il cambiamento di stato della richiesta di elaborazione del task.
 /// </summary>
 /// <param name="state">lo stato relativo alla richiesta di elaborazione</param>
 /// <param name="error">l'eventuale errore verificatosi durante la comunicazione col servizio</param>
 /// <remarks>
 /// Se non si è verificato alcun errore durante la comunicazione col servizio, il parametro corrispondente
 /// va impostato a null. In modo analogo, se i risultati dell'elaborazione di un task non sono disponibili
 /// a causa di un errore o perché l'operazione è stata annullata, il parametro corrispondente dovrà essere
 /// impostato a null.
 /// </remarks>
 private void RaiseTaskExecutionProgress(TaskExecutionState state, Exception error)
 {
     TaskExecutionProgressHandler handler = OnTaskExecutionProgress;
     if (handler != null)
     {
         TaskExecutionProgressEventArgs args =
             new TaskExecutionProgressEventArgs(state, error, m_TaskRequestId);
         OnTaskExecutionProgress(this, args);
     }
 }