.net 收集被修改;无法在套接字上执行操作。接收
当我在做:.net 收集被修改;无法在套接字上执行操作。接收,.net,sockets,f#,.net,Sockets,F#,当我在做: Array.Clear(Core.arrayRead,0 , 1024) let cBytes = Core.socket.Receive(Core.arrayRead, 1024, SocketFlags.None) 第一次(使用空数组)它工作得很好,但下一次当我清除数组以接收新字节时,我遇到了以下错误:集合被修改;无法执行操作列表 天还在晴吗?还是怎样我怎样才能修好它 更多代码: try Core.listPos |> Seq.iter /> fun op
Array.Clear(Core.arrayRead,0 , 1024)
let cBytes = Core.socket.Receive(Core.arrayRead, 1024, SocketFlags.None)
第一次(使用空数组)它工作得很好,但下一次当我清除数组以接收新字节时,我遇到了以下错误:集合被修改;无法执行操作列表
天还在晴吗?还是怎样我怎样才能修好它
更多代码:
try
Core.listPos |> Seq.iter /> fun op ->
Core.socket.Send(op.Buffer) |> ignore
Array.Clear(Core.arrayRead,0 , 1024)
let cBytes = Core.socket.Receive(Core.arrayRead, 1024, SocketFlags.None) // error ->
if cBytes > 0 then
Core.WorkPos cBytes
with
| :? SocketException as e -> Core.output.Add ("Ошибка протокола связи : " + e.Message)
| _ as e -> Core.output.Add ("Ошибка : " + e.Message) // My error here
在遍历枚举(foreach)时不能修改它。您使用的外部代码是什么
使用
字节[]
接收数据,请参见示例。遍历枚举时不能修改它(foreach)。您使用的外部代码是什么
使用
字节[]
接收数据,请参见示例。只是想总结一下,如果有人读到这篇文章或将来遇到类似问题:
问题在于中的Core.listPos集合和Seq.iter
Core.listPos |> Seq.iter /> fun op ->
...
不是socket.Receive,因为listPos已从另一个线程更改。
如果集合发生更改,Seq.iter将(就像C#中的foreach一样)抛出此类异常(这通常是由于循环体中的一些。Remove
)
一个简单的解决办法是写
let positions = Core.listPos |> Seq.toArray
positions |> Seq.iter /> fun op -> ...
我只是想总结一下,如果有人读到了这篇文章,或者将来会遇到类似的问题: 问题在于中的Core.listPos集合和Seq.iter
Core.listPos |> Seq.iter /> fun op ->
...
不是socket.Receive,因为listPos已从另一个线程更改。
如果集合发生更改,Seq.iter将(就像C#中的foreach一样)抛出此类异常(这通常是由于循环体中的一些。Remove
)
一个简单的解决办法是写
let positions = Core.listPos |> Seq.toArray
positions |> Seq.iter /> fun op -> ...
嗨,我不认为这个错误来自这两行代码-你能检查异常的stacktrace并给出上面提到的行吗?是的,我也发现这很奇怪。但是错误正好出现在接收字符串上。设置arrayRead是否会改变Core.listPos?这是我能从中得到的唯一感觉(因为Seq.iter是的,这是我的错。Core.listPos被另一个threadHi更改了,我不认为这个错误来自这两行代码-你能检查异常的stacktrace并给出上面提到的行吗?是的,我也发现这很奇怪。但是错误正好出现在接收字符串上。设置arrayRead是否有点奇怪更改Core.listPos?这是我能从中得到的唯一感觉(因为Seq.iter是的,这是我的错。Core.listPos被另一个线程更改了。哦,这真的是我的错。我错过了Core.listPos在单独的线程中更改了。哦,这真的是我的错。我错过了Core.listPos在单独的线程中更改了。