How to Implement backgroundworker or thread in ASP.Net(C#) WEB Application for Exporting Large amount of Data in to Excel? Is there any another approach to export to excel in background?
<%@ Page Title="" Language="C#" MasterPageFile="~/export_module.master"
AutoEventWireup="true" CodeFile="GenerateReport.aspx.cs"
Inherits="" Async="true" %>
public readonly BackgroundWorker worker = new BackgroundWorker();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
worker.DoWork += new DoWorkEventHandler(DoWork);
//worker.ProgressChanged += new ProgressChangedEventHandler(WorkerProgressChanged);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompleted);
}
}
//Export To Excel Click event
protected void btn_Export_Click(object sender, EventArgs e)
{
if (!worker.IsBusy){
worker.RunWorkerAsync("ExportReport");
}
}
//BackgroundMethod
private void DoWork(object sender, DoWorkEventArgs e)
{
exportToExcel();
}
private void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
//Export To Excel Using ClosedXML
public void ExportReportWithHeaderClosedXML(string reportName, string fileName, DataTable dataTable)
{
int usedCells = dataTable.Columns.Count;
string ReportDate = string.Empty;
string attachment = "inline;filename=" + fileName + ".xlsx";
using (XLWorkbook wb = new XLWorkbook())
{
//Add method of ClosedXML class library only accepts worksheet name of 31 characters.
IXLWorksheet worksheet = wb.Worksheet(1);
//Insert Report Data
worksheet.Cell(4, 1).InsertTable(dataTable);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename=" + fileName + ".xlsx");
using (MemoryStream MyMemoryStream = new MemoryStream())
{
wb.SaveAs(MyMemoryStream);
MyMemoryStream.WriteTo(HttpContext.Current.Response.OutputStream);
HttpContext.Current.Response.End();
}
}
}
If you want to start new single thread then it will be usefull.
var worker = new BackgroundWorker();
worker.DoWork += (o, ea) =>
{
//It will execute after start new Thread.
//Write your code for execute Export Excel.
};
worker.RunWorkerCompleted += (o, ea) =>
{
//You will get pointer when this worker finished the job.
};
worker.RunWorkerAsync();