Это небольшая программа, которую я пишу и использую только.
Теперь я собираюсь написать код всех областей, где я использую hashset, вызвавший эту проблему.
Я не понимаю, как это возможно. Этот элемент используется только в MainWindow
hsProxyList - это hashset
  HashSet<string> hsProxyList = new HashSet<string>();
ошибка произошла при следующей итерации
 lock (hsProxyList)
            {
    int irRandomProxyNumber = GenerateRandomValue.GenerateRandomValueMin(hsProxyList.Count, 0);
    int irLocalCounter = 0;
    foreach (var vrProxy in hsProxyList)
    {
       if (irLocalCounter == irRandomProxyNumber)
       {
       srSelectedProxy = vrProxy;
       break;
       }
         irLocalCounter++;
       }
    }
}
В других местах, где я использую hsProxyList
Я не блокирую объект, когда получаю его счет - я полагаю, это не вызовет какой-либо ошибки, но может быть неправильной - не смертельно важно
 lblProxyCount.Content = "remaining proxy count: " + hsProxyList.Count;
новый
lock (hsProxyList)
{
    hsProxyList.Remove(srSelectedProxy);
}
новый
lock (hsProxyList)
{
    hsProxyList = new HashSet<string>();
    foreach (var vrLine in File.ReadLines(cmbBoxSelectProxy.SelectedItem.ToString()))
    {
        hsProxyList.Add(vrLine);
    }
}
Как видно, я использую блокировку всюду. Это многопоточное программное обеспечение. Все hsProxyList используются в MainWindow.xaml.cs - это приложение WPF для С#
