Вы можете звонить 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;
}
}