我正在使用 ReportViewer 控件和自定义打印作业工作流程,这给我带来了一些问题。我的代码看起来有点像这样:
ids.ForEach(delegate(Guid? guid)
{
var details = items.Where(e => e.guid == guid);
var ds = new ReportDataSource("Form", details);
ReportViewer.LocalReport.DataSources.Clear();
ReportViewer.LocalReport.DataSources.Add(ds);
ReportViewer.RefreshReport();
});
当RefreshReport()
最终被调用时,它会触发它的RenderingComplete
事件,并且在那个事件中我有逻辑来排队打印作业:
if (DisplayPrintDialog) ReportViewer.PrintDialog();
else
{
var document = new PrintDocument(ReportViewer.LocalReport);
document.PrinterSettings = ReportViewer.PrinterSettings;
document.Print();
}
DisplayPrintDialog = false;
问题是 ForEach 循环在RenderingComplete
事件触发之前完成运行,因此我需要一种方法来阻止我的 ForEach 循环,直到循环的每次传递都触发 RenderingComplete 事件。什么是解决这个问题的好方法?