Render a Report in the Thread

This example shows how to render a report in the thread. Rendering the report in the thread is run in the background process. For this purpose the BackgroundWorker class is used:

private System.ComponentModel.BackgroundWorker backgroundWorker1;

private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}


In the start of the backgroundWorker1_DoWork process event, you can dload the report and connect data. Also you should subscribe to the Rendering event of the compiled report object:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
using (var stream = Assembly.GetExecutingAssembly().
GetManifestResourceStream("RenderInThread.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.CompiledReport.Rendering += new EventHandler(CompiledReport_Rendering);
report.Render(false);
}


In the CompiledReport_Rendering event update the text on the form - show a value of the StatusString property. After completion of the thread work, show the report in the viewer:

void CompiledReport_Rendering(object sender, EventArgs e)
{
button1.Invoke((EventHandler)delegate { button1.Text = report.StatusString; });
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
report.Show();
}


In the screenshot below you can see the result of the sample code.

Render in Thread