gpt4 book ai didi

c# - 集合被修改;枚举操作可能无法执行。到处都在用锁怎么可能?

转载 作者:太空狗 更新时间:2023-10-29 21:05:02 26 4
gpt4 key购买 nike

这是一个只有我自己编写和使用的小程序。

现在我将编写所有使用导致此问题的哈希集的区域的代码

我不明白这怎么可能。此项仅在 MainWindow 中使用

hsProxyList 是一个哈希集

  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);
}
}

可以看出我到处都在使用锁。这是一个多线程软件。 MainWindow.xaml.cs 中使用了所有 hsProxyList - 它是一个 C# WPF 应用程序

最佳答案

问题出在你身上

lock (hsProxyList)
{
hsProxyList = new HashSet<string>();
// etc
}

所有锁都在一个特定的对象上,但是当你这样做时你正在改变对象 hsProxyList = new HashSet<string>();因此变量 hsProxyList 所指的对象不再被锁定。

关于c# - 集合被修改;枚举操作可能无法执行。到处都在用锁怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16759964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com