由于线程中的渲染报告在后台运行,因此它提供了提高生产力的机会。为此目的,使用BackgroundWorker该类。为简单起见,运行相同的报告以构建五个不同的线程:
private void button1_Click(object sender, EventArgs e)
{
for (int index = 0; index < 5; index++)
{
var worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
worker.RunWorkerAsync();
}
}
在backgroundWorker1_DoWork()事件过程开始时,您可以加载报告并连接数据。此外,如果有必要,您可以订阅一些事件。最后,编译并呈现报告:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
var report = new StiReport();
using (var stream = Assembly.GetExecutingAssembly().
GetManifestResourceStream("RenderInThread2.Master-Detail-Subdetail.mrt"))
{
report.Load(stream);
}
DataSet data = new DataSet();
data.ReadXmlSchema("..\\..\\Data\\demo.xsd");
data.ReadXml("..\\..\\Data\\demo.xml");
report.RegData(data);
report.IsRendered = false;
report.Compile();
report.Render(false);
}