Exemplo n.º 1
0
 private void ExecuteTask(Task task)
 {
     currentTask = task;
        Power.ExecutionState = ExecutionState.Continuous | ExecutionState.SystemRequired;
        try
        {
     task.Canceled = false;
     task.OnTaskStarted();
     foreach (ErasureTarget target in task.Targets)
      try
      {
       UnusedSpaceTarget unusedSpaceTarget =
        target as UnusedSpaceTarget;
       FileSystemObjectTarget fileSystemObjectTarget =
        target as FileSystemObjectTarget;
       if (unusedSpaceTarget != null)
        EraseUnusedSpace(task, unusedSpaceTarget);
       else if (fileSystemObjectTarget != null)
        EraseFilesystemObject(task, fileSystemObjectTarget);
       else
        throw new ArgumentException("Unknown erasure target.");
      }
      catch (FatalException)
      {
       throw;
      }
      catch (OperationCanceledException)
      {
       throw;
      }
      catch (ThreadAbortException)
      {
      }
      catch (Exception e)
      {
       Logger.Log(e.Message, LogLevel.Error);
       BlackBox.Get().CreateReport(e);
      }
        }
        catch (FatalException e)
        {
     Logger.Log(e.Message, LogLevel.Fatal);
        }
        catch (OperationCanceledException e)
        {
     Logger.Log(e.Message, LogLevel.Fatal);
        }
        catch (ThreadAbortException)
        {
        }
        catch (Exception e)
        {
     Logger.Log(e.Message, LogLevel.Error);
     BlackBox.Get().CreateReport(e);
        }
        finally
        {
     Power.ExecutionState = ExecutionState.Continuous;
     if (task.Schedule is RecurringSchedule)
      ((RecurringSchedule)task.Schedule).Reschedule(DateTime.Now);
     if (task.Schedule == Schedule.RunOnRestart)
      task.Schedule = Schedule.RunNow;
     task.OnTaskFinished();
     currentTask = null;
        }
 }