private long MeasureProgressUpdateCost(bool doMakeProgressCalls, int iterationsToDo) { _dialog = new ProgressDialog(); BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += OnDoSomeWork; _dialog.BackgroundWorker = worker; WorkArguments args = new WorkArguments(); args.doMakeProgressCalls = doMakeProgressCalls; args.secondsToUseUp = 0; args.iterationsToDo = iterationsToDo; _dialog.ProgressState.Arguments = args; Stopwatch w = new Stopwatch(); w.Start(); _dialog.ShowDialog(); _dialog.Close(); _dialog.Dispose(); _dialog = null; w.Stop(); worker.Dispose(); Debug.WriteLine("Took "+ w.Elapsed); return w.ElapsedMilliseconds; }