2009-10-28 27 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访问投射到的对象类型。