2009-10-28 48 views
0
namespace BackgroundWorkerExample 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
     { 
      Thread.Sleep(1000); 
      MessageBox.Show("Now!"); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      //Not working friends! 
      backgroundWorker1.RunWorkerAsync(backgroundWorker1_DoWork); 
     } 
    } 
} 

我如何可以調用的DoWork方法(我連做呢?笑後臺工作人員的幫助。非常基本

回答

1

沒關係,我發現我自己的答案。原來這個方法沒有我的用例的任何參數。

namespace BackgroundWorkerExample 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
     { 
      Thread.Sleep(1000); 
      MessageBox.Show("Now!"); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      //Now it works! 
      backgroundWorker1.RunWorkerAsync(); 
     } 
    } 
} 
+1

但是MessageBox.Show()可能會失敗。 –

+2

不,顯示調用將起作用並顯示模型對話框,但請注意,它不會阻止您訪問Form1實例。這聽起來很奇怪,但MessageBox是從另一個線程引發的,而不是主線程,所以這種行爲是可取的。 –

+0

lextm,你說得對,我只是測試過。再學習一些東西。 –

3
backgroundWorker1.RunWorkerAsync(); 

的參數是可選的,用於將參數傳遞給DoWork的:

backgroundWorker1.RunWorkerAsync(10); 
backgroundWorker1.RunWorkerAsync(obj); // Pass multiple arguments using an object 

其可以從DoWork的使用e.Argument訪問投射到的對象類型。