http://thegrayzone.co.uk/blog/2010/07/background-worker-and-multiple-parameters/
using System;
using System.ComponentModel;
private void StartBackgroundWorker()
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
// Declare Tuple object to pass multiple params to DoWork method.
var params = Tuple.Create<int, DateTime, bool>(44, DateTime.Now, false);
worker.RunWorkerAsync(params);
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
// Get Tuple object passed from RunWorkerAsync() method
Tuple<int, DateTime, bool> params = e.Argument as Tuple<int, DateTime, bool>
// Do some long running process
// Set the result using new Tuple object to pass multiple objects to completed event handler
e.Result = Tuple.Create<CustomObject, bool, string>(customObj, true, “hello”);
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Get result objects
Tuple<CustomObject, bool, string> res = e.Result as Tuple<CustomObject, bool, string>
}
http://msdn.microsoft.com/en-us/library/system.tuple.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1