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