2015-04-17 45 views
0

我想一個額外的參數傳遞給我的DoWork的方法,但我得到的No overload for 'backgroundWorker1_DoWork' matches delegate 'System.ComponentModel.DoWorkEventHandler'編譯錯誤隨着BackgroundWorker的

編譯錯誤這是我的語法,我應該怎麼做才能解決這個問題?

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]; 
     } 
    } 
} 
} 
+1

爲什麼你傳遞'字符串[] employeeName'參數你甚至處理程序,它應該只有前兩個參數 – Habib

+0

@Habib我會更新我的代碼,我需要使用該變量在我的DoWork的過程 –

+1

@BigPimpin:它不能像這樣工作。你從e.Argument – JeffRSon

回答

3

DoWorkEventHandler具有以下定義:

public delegate void DoWorkEventHandler(
    Object sender, 
    DoWorkEventArgs e 
) 

不能添加第三個參數。您想要獲取的對象是DoWorkEventArgs.Argument屬性。

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]; 
     } 
    } 
}