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);
}