private void OnRequestCloseProgramMessage(RequestCloseProgramMessage closeMessage) { if (files.Any(f => f.IsExecuting)) { MessengerInstance.Send(new ClosingWhenExecutingMessage()); closeMessage.Execute(false); return; } var notSavedFiles = Files .Where(f => !f.IsSaved) .ToList(); if (notSavedFiles.Count == 0) { closeMessage.Execute(true); return; } MessengerInstance.Send(new SaveBeforeCloseMessage( notSavedFiles.Select(f => new WorkflowFileInfo(f)).ToList(), null, result => { if (result == QuestionResult.Cancel) { closeMessage.Execute(false); } else if (result == QuestionResult.Yes) { foreach (var notSavedFile in notSavedFiles) { var r = notSavedFile.Save(); if (!r) { closeMessage.Execute(false); return; } } } closeMessage.Execute(true); })); }