Quantcast
Channel: Windows Forms Data Controls and Databinding forum
Viewing all articles
Browse latest Browse all 2535

How to pass my custom data to background worker's ReportProgress event

$
0
0

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




Viewing all articles
Browse latest Browse all 2535

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>