Rajeev Kumar
Rajeev Kumar

Reputation: 4963

Getting to know BackGroundWorker.RunWorkerCompleted Event is over

I am using background worker class in code as

private void bwFilter_DoWork(object sender, DoWorkEventArgs e)
    {            
       //Some Code
    }
    private void bwFilter_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {          
       //Some code
    }

Now i am calling this events in a button click as

btnClick_Click(Object Sender,EventArgs e)
{
      bwFilter.RunWorkerAsync();       
} 

Now i wanna do something in btnClick only after bwFilter_RunWorkerCompleted is completed. I try the follwing but result in deadlock situation

 btnClick_Click(Object Sender,EventArgs e)
{
      bwFilter.RunWorkerAsync();
      While(bwFilter.IsBusy)
      {
          Continue;
      }   
     //Start coding Again Here    
} 

Upvotes: 0

Views: 200

Answers (2)

Hans Passant
Hans Passant

Reputation: 941715

Waiting for the background worker to finish completely defeats the point of using a worker. And inevitably causes deadlock.

So just don't bother, call bwFilter_DoWork() directly.

Upvotes: 1

Richard Schneider
Richard Schneider

Reputation: 35477

Use the RunWorkerCompleted event, see http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.runworkercompleted.aspx

bwFilter.RunWorkerCompleted += (s, e) => { ... do something ... };
bwFilter.RunWorkerAsynch();

Upvotes: 1

Related Questions