0

I am wanting to pass an additional parameter to my DoWork method, but am getting a compile error of No overload for 'backgroundWorker1_DoWork' matches delegate 'System.ComponentModel.DoWorkEventHandler'

This is my syntax, what should I do to fix this?

namespace Testing
{
public partial class Form1 : Form1
{
    public static string[] employeeName;

    public Form1()
    {
        InitializeComponent();
        backgroundWorker1.WorkerReportsProgress = true;
        backgroundWorker1WorkerSupportsCancellation = true;
        backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
    }
    private void btn1_Click(object sender, EventArgs e)
    {
        backgroundWorker1.RunWorkerAsync(employeeName);
    }
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e, string[] employeeName)
    {
        //Just for example sake
        for (int q = employeeName.GetLowerBound(0); q <= employeeName.GetUpperBound(0); q++)
        {
          MessageBox.Show(employeeName[q];
        }
    }
}
}
Big Pimpin
  • 427
  • 9
  • 23

1 Answers1

3

DoWorkEventHandler has the following definition :

public delegate void DoWorkEventHandler(
    Object sender,
    DoWorkEventArgs e
)

You cannot add a third argument. The object you want to get is in DoWorkEventArgs.Argument property.

public partial class Form1 : Form1
{
    public static string[] employeeName;

    public Form1()
    {
        InitializeComponent();
        backgroundWorker1.WorkerReportsProgress = true;
        backgroundWorker1WorkerSupportsCancellation = true;
        backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
    }
    private void btn1_Click(object sender, EventArgs e)
    {
        backgroundWorker1.RunWorkerAsync(employeeName);
    }
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        string[] employeeName = (string[])e.Argument;
        //Just for example sake
        for (int q = employeeName.GetLowerBound(0); q <= employeeName.GetUpperBound(0); q++)
        {
          MessageBox.Show(employeeName[q];
        }
    }
}
Guillaume
  • 12,824
  • 3
  • 40
  • 48