see the code first
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
DataGridView dgv = null;
BackgroundWorker bgWorker = null;
DataSet ds = null;
private void Form2_Load(object sender, EventArgs e)
{
// create a DataGridView
dgv = new DataGridView();
dgv.AllowUserToAddRows = false;
dgv.Size = new Size(400, 200);
dgv.Location = new Point(30, 30);
this.Controls.Add(dgv);
// create a BackgroundWorker
bgWorker = new BackgroundWorker();
bgWorker.WorkerReportsProgress = true;
bgWorker.DoWork += new DoWorkEventHandler(DoWork);
bgWorker.ProgressChanged += new ProgressChangedEventHandler(ProcessChanged);
}
private void DoWork(object sender, DoWorkEventArgs e)
{
DataTable dt = new DataTable("TaskXML");
dt.Columns.Add(new DataColumn("TaskName", typeof(string)));
dt.Columns.Add(new DataColumn("TaskContent", typeof(string)));
dt.Columns.Add(new DataColumn("TaskBeginDate", typeof(string)));
dt.Columns.Add(new DataColumn("TaskEndDate", typeof(string)));
dt.Columns.Add(new DataColumn("TaskStatus", typeof(string)));
//read xml file
XmlDocument xmldoc = new XmlDocument();
ds = new DataSet("XMLTaskData");
ds.Tables.Add(dt);
try
{
xmldoc.Load(@"C:\...\test.xml");
XmlNode node = xmldoc.SelectSingleNode("TaskList");
if (node == null)
{
ds = null;
}
for (int i = 0; i < xmldoc.SelectNodes("TaskList/Task").Count; i++)
{
DataRow row = dt.NewRow();
foreach (XmlNode xcnode in xmldoc.SelectNodes("TaskList/Task").Item(i).ChildNodes)
{
row[xcnode.Name] = xcnode.InnerText;
}
dt.Rows.Add(row);
bgWorker.ReportProgress(i);
Thread.Sleep(1000);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void ProcessChanged(object sender, ProgressChangedEventArgs e)
{
if (ds != null)
{
dgv.DataSource = ds;
dgv.DataMember = ds.Tables[0].TableName;
}
dgv.Refresh();
}
private void button1_Click(object sender, EventArgs e)
{
bgWorker.RunWorkerAsync();
}
}bgWorker.ReportProgress(i); is getting called from DoWork event and i is passing there. i like to pass my custom object of TaskList class to ReportProgress event. is it possible. if no then how could achieve it with my own event. please post a example.
thanks