非同期または長時間実行のレポート描画処理を管理できます。ActiveReportsでは、さまざまなオプションを使用して、エクスポート処理を制御することができ、より応答性の高いアプリケーションを作成できます。このトピックでは、レポートの描画処理の一般的な使用例について説明します。
以下の手順は、Windowsビューワのアプリケーションを使用して、エクスポート時の描画処理の進行状況を表示する方法を説明します。例としては、[ユーザーフォルダ]\ActiveReportsNET18\Samples\Samples\API\PageAndRDLに格納されたExportサンプルを使用しています。
進行状況は、レポートを描画する時にPDF、画像、HTML、およびExcelのエクスポートで表示できます。
VisualBasic.NETコード。exportButton_Clickメソッド内に貼り付けます |
コードのコピー
|
---|---|
Private Async Sub ExportAsync(ByVal report As PageReport, ByVal renderingExtension As IRenderingExtension, ByVal outputProvider As StreamProvider, ByVal settings As NameValueCollection) labelExport.Text = "エクスポートを開始しました..." Dim control As var = Me var progress = New Progress(progressInfo => { control.BeginInvoke(New MethodInvoker(() => { labelExport.Text = progressInfo.IsLast ? "エクスポートが終了しました。" : $"{progressInfo.PageNumber}ページをエクスポートしました。" )) } } ) await Task.Run(() => { Try report.Document.Render(renderingExtension, outputProvider, settings, False, False, CancellationToken.None, progress) End Try } ) End Sub |
C# code. Paste inside the exportButton_Click() method |
コードのコピー
|
---|---|
private async void ExportAsync(PageReport report, IRenderingExtension renderingExtension, StreamProvider outputProvider, NameValueCollection settings) { labelExport.Text = "エクスポートを開始しました..."; var control = this; var progress = new Progress<ProgressInfo>(progressInfo => { control.BeginInvoke(new MethodInvoker(() => { labelExport.Text = progressInfo.IsLast ? "エクスポートが終了しました。" : $"{progressInfo.PageNumber}ページをエクスポートしました。"; ))}; }); await Task.Run(() => { try { report.Document.Render(renderingExtension, outputProvider, settings, false, false, CancellationToken.None, progress); } catch { } }); } |
次のコードを使用して、レポートの描画処理またはエクスポートをキャンセルできます。
Visual Basic.NET code |
コードのコピー
|
---|---|
Private Async Sub ExportAsync(ByVal report As PageReport, ByVal renderingExtension As IRenderingExtension, ByVal outputProvider As FileStreamProvider, ByVal settings As NameValueCollection) _cancellationTokenSource = New CancellationTokenSource() exportButton.Text = "キャンセル" exportButton.Click -= exportButton_Click exportButton.Click += AddressOf cancelExport Await Task.Run(Function() Try report.Document.Render(renderingExtension, outputProvider, settings, False, False, _cancellationTokenSource.Token) Catch __unusedOperationCanceledException1__ As OperationCanceledException End Try End Function) If _cancellationTokenSource.IsCancellationRequested Then MessageBox.Show("エクスポートがキャンセルされました。", "Export", MessageBoxButtons.OK, MessageBoxIcon.Information) _cancellationTokenSource.Dispose() _cancellationTokenSource = Nothing exportButton.Click -= AddressOf cancelExport exportButton.Click += exportButton_Click exportButton.Text = "エクスポート" End Sub Private Sub cancelExport(ByVal sender As Object, ByVal e As EventArgs) _cancellationTokenSource?.Cancel() End Sub |
C# code |
コードのコピー
|
---|---|
private async void ExportAsync(PageReport report, IRenderingExtension renderingExtension, FileStreamProvider outputProvider, NameValueCollection settings) { _cancellationTokenSource = new CancellationTokenSource(); exportButton.Text = "Cancel"; exportButton.Click -= exportButton_Click; exportButton.Click += cancelExport; await Task.Run(() => { try { report.Document.Render(renderingExtension, outputProvider, settings, false, false, _cancellationTokenSource.Token); } catch (OperationCanceledException) { } }); if (_cancellationTokenSource.IsCancellationRequested) MessageBox.Show("エクスポートがキャンセルされました。", "Export", MessageBoxButtons.OK, MessageBoxIcon.Information); _cancellationTokenSource.Dispose(); _cancellationTokenSource = null; exportButton.Click -= cancelExport; exportButton.Click += exportButton_Click; exportButton.Text = "エクスポート"; } private void cancelExport(object sender, EventArgs e) { _cancellationTokenSource?.Cancel(); } |
レポートの描画処理に関する情報をログに記録するには、エクスポート呼び出しの前後に次のコードを追加します。詳細については、「トレース リスナー」を参照してください。
Visual Basic.NET code |
コードのコピー
|
---|---|
Private Sub SurroundingSub() Dim traceWriter = New TextWriterTraceListener("TextWriterOutput.log", "myListener") Trace.Listeners.Clear() Trace.Listeners.Add(traceWriter) Trace.TraceInformation($"Exported {progressInfo.PageNumber} pages.") Trace.Flush() Trace.Listeners.Clear() End Sub |
C# code |
コードのコピー
|
---|---|
var traceWriter = new TextWriterTraceListener("TextWriterOutput.log", "myListener") Trace.Listeners.Clear(); Trace.Listeners.Add(traceWriter); ... Trace.TraceInformation($"Exported {progressInfo.PageNumber} pages."); ... Trace.Flush(); Trace.Listeners.Clear(); |