ServiceBusMQ.SbmqSystem.InvokeWhileMonitoringPaused C# (CSharp) Method

InvokeWhileMonitoringPaused() private method

private InvokeWhileMonitoringPaused ( System.Action a ) : void
a System.Action
return void
    private void InvokeWhileMonitoringPaused(Action a) {
      if( _currentMonitor == null ) {
        _log.Trace("Not monitoring yet, skipping");
        return;
      }

      BackgroundWorker bw = new BackgroundWorker();

      bw.DoWork += (sender, arg) => {
        ThreadState s = arg.Argument as ThreadState;
        PauseMonitoring();

        while( !s.Paused )
          Thread.Sleep(100);

        OnStartedLoadingQueues();

        try {
          a();

        } finally {
          OnFinishedLoadingQueues();
          ResumeMonitoring();
        }

      };

      bw.RunWorkerCompleted += (object s, RunWorkerCompletedEventArgs ev) => {
        if( ev.Error != null )
          throw ev.Error;
      };

      bw.RunWorkerAsync(_currentMonitor);
    }