2009-10-28 1 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

아니요, Show 호출이 작동하고 모델 대화 상자가 표시되지만 Form1 인스턴스에 액세스하는 것을 차단하지는 않습니다. 이상하게 들릴지 모르지만 MessageBox는 주 스레드보다 다른 스레드에서 발생하므로이 동작이 바람직합니다. –

+0

lextm, 네가 맞아, 방금 테스트 했어. 다시 배웠습니다. –

3
backgroundWorker1.RunWorkerAsync(); 

인수는 DoWork로 인수를 전달하는 데 사용, 선택 사항입니다 : e.Argument을 사용하여 DoWork 액세스 할 수 있습니다

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

객체 유형에 캐스팅.