private static void te_OnTaskExecutionCompleted(object sender, TaskExecutionCompletedEventArgs e) { string result = string.Empty; string report = string.Empty; if (e.Cancelled) { report = string.Format("Annullato (task id = {0}).", e.Id); } else if (e.Error != null) { report = string.Format("Errore (task id = {0}).", e.Id) + e.Error.Message; } else { TaskResults tr = e.Result; report = string.Format("Completato (task id = {0}) in {1} con {2} errori.", e.Id, tr.ElapsedTime, tr.EncounteredErrors.Length); result = string.Format("Risultati (task id = {0}).", e.Id) + Environment.NewLine + tr.Contents; } Console.WriteLine(report); Console.WriteLine("result: " + result); mre.Set(); }
/// <summary> /// Genera un nuovo evento per notificare il completamento della richiesta di elaborazione del task. /// </summary> /// <param name="cancelled">un valore che indica se il task è stato annullato</param> /// <param name="error">l'eventuale errore verificatosi durante la comunicazione col servizio</param> /// <param name="result">gli eventuali risultati scaricati dal server di elaborazione</param> /// <remarks> /// Se non si è verificato alcun errore durante la comunicazione col servizio, il patametro 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 RaiseTaskExecutionCompleted(bool cancelled, Exception error, TaskResults result) { TaskExecutionCompletedHandler handler = OnTaskExecutionCompleted; if (handler != null) { TaskExecutionCompletedEventArgs args = new TaskExecutionCompletedEventArgs(cancelled, error, result, m_TaskRequestId); OnTaskExecutionCompleted(this, args); } }
/// <summary> /// Questo metodo viene invocato nel momento in cui viene completata la 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_Completed(object sender, TaskExecutionCompletedEventArgs args) { string result = string.Empty; StringBuilder report = new StringBuilder(); if (args.Cancelled) { report.Append("Richiesta di elaborazione annullata."); if (!string.IsNullOrWhiteSpace(args.Id)) report.AppendFormat(" Task Id = {0}.", args.Id); } else if (args.Error != null) { report.Append("Errore durante la richiesta."); if (!string.IsNullOrWhiteSpace(args.Id)) report.AppendFormat(" Task Id = {0}.", args.Id); if (args.Error is FaultException<ServiceFault>) { FaultException<ServiceFault> fault = args.Error as FaultException<ServiceFault>; report.AppendFormat(" Identificativo errore: {0}. ", fault.Detail.Id); report.Append(TaskExecutionStateDescriptions.GetStateDescription(fault.Detail.Code)); } else { report.Append(' '); report.Append(args.Error.Message); } } else { TaskResults tr = args.Result; result = tr.Contents; report.AppendLine("Richiesta di elaborazione completata con successo."); report.AppendLine("Tempo di elaborazione sul server: " + tr.ElapsedTime + "."); if (tr.EncounteredErrors != null && tr.EncounteredErrors.Length > 0) { report.AppendLine("Errori di elaborazione: " + tr.EncounteredErrors.Length + "."); foreach (var pe in tr.EncounteredErrors) { report.AppendLine(string.Format("[Id = {0}, Codice = {1}, {2}]", pe.Id, pe.Code, pe.Details)); } } } m_Updater.Update(() => { TaskResult = result; UpdateReportText(report.ToString()); IsBusy = false; } ); }