2011-05-12 2 views
3

DoWork() 처리기로 작업을 완료 한 다음 RunWorkerCompleted()를 수행하면 RunWorkerAsync()를 다시 호출하고 DoWork() 처리기를 다시 입력 할 수 있습니다. 또는 다른 "새로운"작업을 수행하고 새로운 BackgroundWorker를 만들어야합니까? 그런 일이 일어난 후에 처분이나 다른 정리 작업이 끝나면 더 이상 실용적인 bg 작업자가 없습니다.BackgroundWorker : 일단 DoWork() 이벤트 핸들러가 완료되면 죽은 상태입니까?

+0

그냥 다시'RunWorkerAsync'를 호출하기 전에 이벤트 대기해야합니다. –

답변

2

RunWorkerAsync으로 전화 할 수 있습니다. 새 BackgroundWorker 개체를 만들 필요가 없습니다.


유일한 제한

BackgroundWorker 이미 비동기 작업과 현재 바쁜 동안 당신이 그것을 호출 할 수 있다는 것입니다. 일반적인 접근 방식은 사용자가 버튼을 클릭 할 때 RunWorkerAsync으로 전화한다고 가정 해 보겠습니다. 그런 다음 버튼을 비활성화하고 RunWorkerCompleted 이벤트의 핸들러에서이를 재 활성화 :

void DoWorkButton_Click(object sender, EventArgs e) 
{ 
    DoWorkButton.Enabled = false; 
    Worker.RunWorkerAsync(); 
} 

void Worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // Do some async operation. 
} 

void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    try 
    { 
     // Do some updates. 
    } 
    finally 
    { 
     DoWorkButton.Enabled = true; 
    } 
} 
관련 문제