public static void ExecuteAsyncJob(ImageShrinkerViewModel context, IBackgroundWorkerUi uiResponder, IAsyncJob job) { var backgroundWorker = new BackgroundWorker(); backgroundWorker.DoWork += job.BackgroundWorkerOnDoWork; backgroundWorker.WorkerSupportsCancellation = true; backgroundWorker.RunWorkerCompleted += (s, e) => { uiResponder.OnWorkerCompleted(); AsyncJobRunning = false; }; uiResponder.Worker = backgroundWorker; job.Prepare(context, uiResponder); AsyncJobRunning = true; backgroundWorker.RunWorkerAsync(); uiResponder.AfterAsyncStart(); }