How do you return some values to the caller from BackgorundWorker thread?

  1. Create BackgroundWorker object
  2. Subscribe to DoWorkEventHandler
  3. Subscribe to RunWorkerCompletedEventHandler
  4. In the background worker thread method, assign the value to the property 'Result' of DoWorkEventArgs
  5. In the RunWorkerCompleted method access the value from the Result property of RunWorkerCompletedEventArgs


namespace My_Samples
{
    using System;
    using System.ComponentModel;

    class Program
    {
        static void Main(string[] args)
        {
            BackgroundWorker worker = new BackgroundWorker();
            worker.DoWork += new DoWorkEventHandler(worker_DoWork);
            worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
            worker.RunWorkerAsync();
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("Main - " + i.ToString());
                System.Threading.Thread.Sleep(200);
            }

            Console.ReadLine();
        }
        static void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            int result = (int)e.Result;
            Console.WriteLine("BackgroundWorker thread completed");
            Console.WriteLine("Result - " + result.ToString());
        }
        static void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            int result = 0;
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("worker_DoWork - " + i.ToString());
                result += i;
                System.Threading.Thread.Sleep(100);
            }
            e.Result = result;
        }
    }
}

No comments:

Post a Comment