private async void ExecuteLongOperation() { using (var cancellationTokenSource = new CancellationTokenSource()) { var operationMonitor = new WindowOperationMonitor(cancellationTokenSource) { Owner = Application.Current.MainWindow }; operationMonitor.Show(); Exception exception = null; try { OnBeforeExecute(); await ContextAction.ExecutionHandler.ExecutionHandlerAsync(ContextAction.ExecutionContext, cancellationTokenSource.Token); } catch (TaskCanceledException) { } catch (Exception e) { exception = e; } finally { OnAfterExecute(); operationMonitor.Close(); } if (exception != null) { ShowErrorMessage(exception); } } }
private async Task ExportData(IDataExporter dataExporter, ExportOptions exportOptions) { using (var cancellationTokenSource = new CancellationTokenSource()) { var operationMonitor = new WindowOperationMonitor(cancellationTokenSource) { IsIndeterminate = false }; operationMonitor.Show(); var exception = await App.SafeActionAsync( async delegate { using (var exportContext = await dataExporter.StartExportAsync(exportOptions, DataExportHelper.GetOrderedExportableColumns(ResultGrid), _outputViewer.DocumentPage.InfrastructureFactory.DataExportConverter, cancellationTokenSource.Token)) { exportContext.SetProgress(_resultRows.Count, operationMonitor); await exportContext.AppendRowsAsync(_resultRows); await exportContext.FinalizeAsync(); } }); operationMonitor.Close(); var isOperationCanceledException = exception is OperationCanceledException; if (exception != null && !isOperationCanceledException) { Messages.ShowError(exception.Message); } } }