2013-03-05 40 views
-2

地獄我tryping轉換BackgroundWork控制,但它說:如何將BackgroundWork轉換爲c#中的控件?

錯誤6參數1:不能從 'System.ComponentModel.BackgroundWorker' 轉換爲 'System.Windows.Forms.Control的'

這裏是代碼

BackgroundWorker bw = new BackgroundWorker(); 
this.Controls.Add(bw); 
bw.DoWork += new DoWorkEventHandler(bw_DoWork); 
bw.RunWorkerAsync(); 

如何使事情的工作?

我嘗試投體重控制,但同樣的事情,這裏是我嘗試:

this.Controls.Add((this.Control)bw); 
+0

你不能添加一個backgroundworker作爲控制...你想要做什麼? – jordanhill123 2013-03-05 10:56:48

+0

我想在後臺發送郵件... – john 2013-03-05 10:57:50

回答

1

歡迎來到SO!

就刪除此行

this.Controls.Add(bw); 

BackgroundWorker不從Control派生,所以你不能把它添加到Controls集合,但你並不需要無論如何要做到這一點。

+0

thnx它的工作是... – john 2013-03-05 11:00:15

+0

非常歡迎:-)如果回答您的問題,您可以將答案標記爲已接受... – 2013-03-05 12:10:13

0

你並不需要一個BackgroundWorker添加到您的窗體的控件。

它只是一個獨立存在的對象。

0

不知道爲什麼要添加中的工人對象到控件集合...

要發送電子郵件,你可以簡單地傳遞這勢必對象DoWorkEventHandler工人方法,看起來像你的一部分方式已經存在: -

BackgroundWorker bw = new BackgroundWorker(); 
this.Controls.Add(bw); //REMOVE THIS LINE 
bw.DoWork += new DoWorkEventHandler(bw_DoWork); 

//If your email relies on data from some object you can pass it in as a parameter 
bw.RunWorkerAsync([email object]) 

然後,你需要有一個輔助方法建立了以處理電子郵件的發送: -

private void bw_DoWork(object sender, DoWorkEventArgs e) 
{ 
    Email email = (Email)sender; 
    //Send email 
} 

你可能阿爾斯Ø想知道目前的作業完成時,在這種情況下,你可以使用類似這樣的做的工作方法的內部: -

this.Invoke(new JobDone(ReportProgress), result); 

隨着受委託者定義爲:

private delegate void JobDone(Result result); 

ReportProgress方法看起來像這樣: -

private void ReportProgress(Result result) 
{ 

}