Хотя это и не тот случай, который изначально задан ОП, это также может произойти из-за состояния гонки (случилось со мной сейчас, и я искал ответ), если вы используете Фонового работника в некотором роде производителя-потребителя. шаблон.
Пример:
if (BckgrndWrkr == null)
{
BckgrndWrkr = new BackgroundWorker();
BckgrndWrkr.DoWork += DoWorkMethod;
BckgrndWrkr.RunWorkerAsync();
}
else if (!BckgrndWrkr.IsBusy)
{
BckgrndWrkr.RunWorkerAsync();
}
В этом случае есть условие гонки: первый экземпляр создает нового фонового работника, второй экземпляр достигает else if
и запускает фонового работника, прежде чем 1-й экземпляр достигнет RunWorkerAsync блока if
, и когда он это сделает выдает ошибку.
Этого можно избежать, добавив блокировку ко всему разделу if + if else.